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は間違い)を指定して再度実行してみたらうまく行きました。

以上です。