我只是在研究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];
}
,其實,我不希望實施這樣的另一個代理類來完成這個方法。我想要做的就是忽略這個未知的選擇器。但是,如果我只需鍵入這一點,這是行不通的:
(NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
return [super methodSignatureForSelector:selector];
}
所以,我不知道有什麼辦法可以簡單地「吞噬」這個錯誤? (不使用異常處理程序,我想要一個「轉發」的方式)。謝謝!
參考http://stackoverflow.com/a/11531609/ –