- (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 的实例!运行时!
Best Answer-推荐答案 strong>
[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/
|