web-dev-qa-db-ja.com

Objective-Cのカテゴリ:自分のカテゴリにないメソッドのプロパティを追加できますか?

カテゴリを使用して、元のクラスのメソッドをプロパティとしても使用できるようにしたいです。

クラスA:

@interface ClassA
- (NSString*)foo;
@end

クラスAカテゴリー

@interface ClassA (Properties)
- (void)someCategoryMethod;
@property (nonatomic, readonly) NSString *foo;
@end

今これを行うと、動作しているように見えます(EDIT:動作しないかもしれません、文句はありませんが、奇妙なことがわかります)が、合成していないため、警告が表示されます私のカテゴリ実装のプロパティ。元のクラスがプロパティを合成するので、コンパイラにすべてが実際に問題ないことをどのように伝えることができますか?

28
Alex Wayne

表示される警告は次のとおりです。

warning: property ‘foo’ requires method '-foo' to be defined - use @synthesize, @dynamic or provide a method implementation

この警告を抑制するには、実装にこれを含めます。

@dynamic foo;

32
codewarrior

カテゴリのインターフェイスで何かが宣言されている場合、その定義はカテゴリの実装に属します。

1
Josh Freeman

コンセプトはあなたが尋ねている質問とは少し異なりますが、私はこれについて2つの記事を書きました。

  1. 基本クラスに触れずにカテゴリにプロパティを追加します: http://compileyouidontevenknowyou.blogspot.com/2012/06/adding-properties-to-class-you-dont.html
  2. カテゴリからiVarにアクセスします: http://compileyouidontevenknowyou.blogspot.com/2012/06/if-you-want-to-keep-everything-in-your.html

これは、少なくとも、メソッドのスウィズリングよりもはるかに優れています。はるかに安全です。

1
Dan Rosenstark