2009-09-25 23 views
12

私はこの[Class method]のような呼び出しを受けており、クラスは が "method"メッセージに応答しないことを警告しています。特定の行のxcodeで警告を無効にするにはどうすればよいですか?

"method"メッセージは実際には存在しませんが、私のコードは未知のメッセージを使用して (forwardingTargetForSelectorを使用して)捕捉しますので、うまく動作し、そのように実行されます。 この迷惑な警告を非表示にするにはどうすればよいですか?

答えて

16

ような何かあなたがオブジェクトに、おそらく、実装されていないメッセージを送信しようとすると、あなたが失敗をキャッチしようとしていることがわかっている場合は、あなたが呼び出しを使用する必要があります。

id myClone = [anObject performSelector:@selector(copy)]; 

宣言する存在しないかもしれないメソッドを呼び出しているということを直接的にあなたの意図に置き換えてください。これは、警告を抑制したり、メソッドを偽造したりするよりも、はるかに明確な方法です。

+0

ありがとうございました。 私はそれが各コールでセレクタを作成する必要がある場合、それは効率的ではないだろうと思います。すべての@selectorを宣言しない限り、 – CodeFlakes

+1

パフォーマンスの違いは事実上検出されません。あなたが心配しているなら、それをプロファイルしてください。途中で最適化しないでください。 –

+2

'performSelector'は、引数の型と戻り値の型がすべてオブジェクトのメソッドに対してのみ機能します。 0,1、または2つの引数を持つ人 – user102008

3

このメソッドを宣言するカテゴリを定義できます。コンパイル時に定義を有効にすると、警告が回避されます。

@interface MyClass (ShutUpTheCompilerMethods) 
- (void)method; 
@end 

... 

[MyClass method] //no warning here 
関連する問題