2011-01-23 11 views
1

私はクラスを作成しました。このクラスには独自の代理プロトコルがあります。そのプロトコル内 は、任意の方法があります、私はiPhone - プロトコルメソッドが実装されているかどうかはどのように分かりますか?

[delegate myOptionalMethod]; 

の形ではなく、私が呼び出した場合の方法は、任意であるとして、myOptionalMethodへの呼び出しを持つクラス内

@protocol myClassDelegate <NSObject> 
@optional 
- (void) myOptionalMethod; 

@end 

のように宣言メソッドを実装していないデリゲートのこのメソッドは、クラッシュします。

したがって、メソッドを呼び出す前にメソッドが実装されているかどうかをテストするにはどうすればよいですか?

ありがとうございました。

答えて

2

これは非常に簡単です。

if([delegate respondsToSelector:myOptionalMethod]){ 
    // You can now call this method without a crash 
    [delegate myOptionalMethod]; 
} 
+0

それだけです。ありがとう!!!!!!!!!!! – SpaceDog

+0

幸いにも、助けてうれしく思います。 –

2

respondsToSelectorメソッドを使用して、デリゲートにセレクタを呼び出す前にデリゲートに関連するメソッドがあるかどうかを判断する必要があります。例えば

if([delegate respondsToSelector:@selector(myOptionalMethod)]) { 
    [delegate myOptionalMethod]; 
} 
+1

タイプミス: - >「デリゲートかどうかを判断するために」「削除するかどうかを決定するために、」厳格な解釈のために、あなたはクラスが-conformsToProtocol:方法でプロトコルを実装するように宣言されたかどうかを確認することができます。そうでなければ良い答え。 – greggian

+0

@Greg Gianforcaroヘッドアップありがとう。 :-) –

2

-respondsToSelector:は、他の方法がここに掲載されているので便利です。

BOOL isAGrommet = [myObject conformsToProtocol: @protocol(Grommet)]; 
関連する問題