2011-03-23 9 views
1

私はBarというFooクラスのオブジェクトを作成します。 Barの代理人はFooです。この[self.delegate variable]のようなFooの変数にアクセスしたいと思います。驚くことではありませんが、これは動作しますが、 "変数なしメソッドが見つかりました"という警告が表示されるので、ゲッターとセッターを書き換えずにこの変数に代理人がアクセスするようにするにはどうすればよいですか?私は、変数と同じことを行うにはどうすればよい非公式プロトコルの変数を委譲する

@interface NSObject(Foo) 
- (void)someMethod; 
@end 

:私はデリゲートメソッドを宣言したい場合

例えば、それは次のようになりますか?

答えて

3

標準パターンは、デリゲートが準拠しているを定義することです。たとえば、次のように

@protocol BarDelegate 
- (void) someMethod; 
- (id) variable; 
@end 

はその後Bar.hにあなたのようなあなたのデリゲートを宣言します。

@interface Bar : NSObject { 
    id<BarDelegate> delegate; 
} 

//alternately: 
@property(nonatomic, retain) id<BarDelegate> delegate; 
@end 

そしてFoo.hにあなたはプロトコルに準拠することを宣言します。

@interface Foo : NSObject<BarDelegate> { 
} 
@end 

そして、コンパイラの警告だろうどこかに行って。

+0

あなたは非公式のプロトコルで同じことをすることはできますか? – Justin

+0

アクセスしたいメンバがゲッター関数を介して公開されている限り、@interface NSObject(Foo) - (id)変数を実行できるはずです。 NSObjectにカテゴリを追加することによって非公式のプロトコルを作成することは好意的ではありませんでしたが、[この他の回答](http://stackoverflow.com/questions/2010058/informal-protocol-in-objective-c) – aroth

+0

'@ optional'キーワードは新しいバージョンのOS Xでしか利用できません。古いバージョンをサポートしたい場合は、まだ非公式のプロトコルが必要です。 – ughoavgfhw

関連する問題