- (NSDictionary*)convertMessageMessage*)event
{
// if this gets called then a derived class either didn't override this function or it called [super convertEvent:event]
[self doesNotRecognizeSelector:_cmd];
return nil;
}
我预计结果值为 nil。
-(void)calling{
NSDictionary *dictionary = [self convertMessage:evt];
}
但是它说无法识别的选择器发送到错误 block 的实例!运行时!
[self doesNotRecognizeSelector:_cmd]
的实现是抛出异常。所以预期的结果是引发异常。如果您期望返回 nil,则只需在方法中返回 nil 并执行 not call doesNotRecognizeSelector:
请参阅 apple's doc
The runtime system invokes this method whenever an object receives an aSelector message it can’t respond to or forward. This method, in turn, raises an NSInvalidArgumentException, and generates an error message.
Any doesNotRecognizeSelector: messages are generally sent only by the runtime system. However, they can be used in program code to prevent a method from being inherited. For example, an NSObject subclass might renounce the copy or init method by re-implementing it to include a doesNotRecognizeSelector: message as follows:
- (id)copy {
[self doesNotRecognizeSelector:_cmd];
}
The _cmd variable is a hidden argument passed to every method that is the current selector;
in this example, it identifies the selector for the copy method. This code prevents instances of the subclass from responding to copy messages or superclasses from forwarding copy messages—although respondsToSelector: will still report that the receiver has access to a copy method.
If you override this method, you must call super or raise an NSInvalidArgumentException exception at the end of your implementation. In other words, this method must not return normally;it must always result in an exception being thrown.
关于ios - 调用方法的无法识别的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15085173/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |