2011-09-01 4 views

答えて

9

使用を代わりに

[self method]; 

そして

代わりの

[self method:dict]; 
+0

驚くばかりです。あなたは私の次の問題を実際に解決しました!それは[自己の方法]でクラッシュしていた、そして今私は理由を知っている。私はあなたに多くのポイントを与えることができれば幸いです:) –

+0

おかげでジョリス、いつも喜んで助けてください。 – sidyll

3

sidyllの答えは動作しますが、よりよい解決策があります。

一般的に、あなたはプロトコル宣言します:

@protocol MyOptionalMethods 
@optional 
- (void)method:(NSDictionary*)dict; 
@end 

をそして、あなたのオブジェクトを宣言は、プロトコルに準拠しています。

id<MyOptionalMethods> foo; 
UIView*<MyOptionalMethods> bar; // it'll be a subclass o' UIView and may implement pro to 

次にチェック:

if ([foo respondsToSelector:@selector(method:)]) 
    [foo method: dict]; 

そうすれば、コンパイラにすべての引数を完全にタイプする機会があります。同様に、このパターンは引数を取らないメソッドや単一のオブジェクト引数に限定されません。

また、これはARCへの移行に対して将来的に保護されています(ARCはperformSelectorの脆弱性について深刻に不平を言うため)。

+0

残念ながら、これは可変メソッド名では機能しません。 –

+1

それは正しいのですが、一般的に可変のメソッド名はデザインが悪いという印です。必ずしもそうではありません。 – bbum

関連する問題