私はObjective-Cの "メッセージ転送"について勉強しています。私は実行時に認識できないセレクタを「飲み込む」ことができるかどうかを検証するためのテストプログラムを書いています。だから私はこれをした:メッセージ転送によって「認識できないセレクタエラー」を「取り込む」ことができますか?
- (void) forwardInvocation: (NSInvocation *) anInvocation {
if ([anInvocation selector] == @selector(testMessage)){
NSLog(@"Unknow message");
}
return;
}
しかし、実行時に "認識できないセレクタ"エラーがスローされます。ので、私は「プロキシ」と呼ばれる別のプロキシクラスと、次のメソッドを記述します。「methodSignatureForSelector」:私はメソッドをオーバーライドする必要があることを知っている解像度検索した後
(NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
if ([Proxy instancesRespondToSelector: selector]) {
return [Proxy instanceMethodSignatureForSelector: selector];
}
return [super methodSignatureForSelector:selector];
}
をしかし、実際には、私が実装する必要はありませんこのような別のプロキシクラスを使用してこのメソッドを実現します。私がしたいのは、この未知のセレクターを無視することだけです。しかし、これを入力すればうまくいきません。
このエラーを単純に「飲み込む」方法はありますか? (例外ハンドラを使用していないので、私は "フォワーディング"のような方法でやりたいと思う)。ありがとう!
Cf. http://stackoverflow.com/a/11531609/ –