• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 调用方法的无法识别的选择器

[复制链接]
菜鸟教程小白 发表于 2022-12-13 01:18:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

- (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-推荐答案


[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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap