Objective-Cでカテゴリにプロパティを持たせる
<objc/runtime.h> の objc_getAssociatedObject を使えば出来ますよとのこと。
// Sample.h
@interface Sample (SampleCategory).
@property (nonatomic) NSString *value;
@end
// Sample.m
@implementation Sample (SampleCategory)
// 無名カテゴリで宣言すればdynamic宣言は不要みたい
//@dynamic value
-(NSString*)value {
return objc_getAssociatedObject(self, @selector(setValue:));
}
-(void)setValue:(NSString*)val {
objc_setAssociatedObject(self, _cmd, val, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
ネットで検索していたら、objc_setAssociatedObjectのd第二引数が文字列じゃなくて、 const void *key になっていて焦ったりしました。
今は文字列ではなくて、 _cmd で設定するみたいですね。 ちなみに当然同一のキーを利用する必要がある訳ですが、そこは @selector で。
appledocでHTML出力がなぜかされなくなっていた
いつも appledoc でDocSetを作ってXcodeのオーガナイザから利用しているのですが、 業務上で納品する場合にHTMLにする必要出てきて、ちょっとはまったのでメモしておきます。
$ appledoc --help
でヘルプを見ると --create-html と言うオプションパラメーターが存在していて、このパラメータを指定すればHTML出力されるようです。 ...と思って実行してみたのですが、うまく行きません。
githubのissueを見てみると、 HTML Documentation is moved, when docset is generated というチケットを発見。
ということですので、 --keep-intermediate-files (–keep-intermediateは間違い)を指定して再度実行してみたらうまく行きました。
以上です。