web-dev-qa-db-ja.com

オプションのプロトコルメソッドが実装されているかどうかを確認する

オプションのプロトコルメソッドが実装されているかどうかを確認するための最良の方法を知っている人はいますか。

私はこれを試しました:

if ([self.delegate respondsToSelector:@selector(optionalProtocolMethod:)] )

デリゲートは次のとおりです。

id<MyProtocol> delegate;

ただし、プロトコルに関数respondsToSelector:が見つからないというエラーが表示されます。

53
Nick Cartwright

respondsToSelector:NSObjectプロトコルの一部です。 NSObjectMyProtocolを含めると、問題が解決するはずです。

@protocol MyProtocol <NSObject>

@optional
-(void)optionalProtocolMethod:(id)anObject;

@end
99
Will Harris

私がしていることは、次のレシピを適用することです。

if(self.delegate && [self.delegate respondsToSelector:@selector(closed)]){
    [self.delegate closed];
}

ここで、「closed」は私が呼び出したかったメソッドです。