以下の内容はhttps://anton0825.hatenablog.com/entry/20140309/1395654256より取得しました。


protectedなプロパティにアクセスすると「unrecognized selector sent to instance」になる

以下のように、Protected.hで宣言しているプロパティがある場合、

// AbstractViewController_Protected.h
@property (nonatomic) NSObject *obj;

このクラスのサブクラスのインスタンスからこのプロパティにアクセスするとエラーになる。

// ConcreteViewController.m
self.obj = @"test"; // unrecognized selector sent to instance

よく考えたらAbstractViewController_Protected.hはカテゴリでメソッドを定義するのでインスタンス変数は作れない。。
protectedなプロパティでインスタンス変数を作りたい場合は、無名カテゴリにもプロパティを宣言しないといけない。

// AbstractViewController.m
@interface AbstractViewController ()
@property (nonatomic, readwrite) NSObject *obj;
@end

これはぱっと見なんで無名カテゴリにプロパティ宣言が必要なのかわからないからイヤだなぁ。




以上の内容はhttps://anton0825.hatenablog.com/entry/20140309/1395654256より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14