Swallow 无法识别来自 NSInvocation forwardInvocation 调用的选择器异常

use*_*691 2 objective-c objective-c-runtime message-forwarding nsinvocation

我有一个正在转发接收消息的对象。它没有实现使用forwardInvocation. 但是,methodSignatureForSelector由于程序的组织方式,在某些时候不会总是返回有效的方法签名。如何吞下由缺少的方法签名生成的异常?覆盖doesNotRecognizeSelector不起作用。谢谢。

new*_*cct 5

您必须生成一些签名(即使是一个虚拟v@:签名,例如,一个返回void且不带参数的方法的签名),然后记住当它到达时什么都不做forwardInvocation:

  • @unmircea:基本上,在你的 `methodSignatureForSelector:` 方法中,如果你决定吞下对选择器的调用,但没有签名,则返回 `[NSMethodSignature signatureWithObjCTypes:"v@:"]`。然后,在你的 `forwardInvocation:` 方法中,检查你在 `methodSignatureForSelector:` 中使用的吞咽选择器上的相同条件,如果满足,只需返回并且不再进一步处理。 (2认同)