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