フレームワークを作成していて、カテゴリ内のスーパークラスにプライベートメソッドを追加して、公開されないようにします。
例として、次のように定義されたパブリッククラスがあるとします。
@interface Animal : NSObject
- (void)makeNoise;
@end
そして、次のようなパブリックサブクラス:
@interface Dog : Animal
- (void)makeNoise;
@end
次に、すべてのオブジェクトに関連するプライベートメソッドを追加したいので、次のようなカテゴリを作成します。Animal
@interface Animal(PrivateMethods)
- (void)privateSing;
@end
そして問題はここにあります。サブクラスからスーパークラスPrivateMethods
カテゴリにアクセスすることはできませんか?
次のコードを実行すると、unrecognized selector sent to instace
エラーが発生します。
#import "Animal+PrivateMethods.h"
@implementation Dog
- (void)description {
// unrecognized selector sent to instace
[self privateSing];
}
@end