加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – “为不存在的方法创建选择器’的Xcode虚假警告’

发布时间:2020-12-14 17:12:45 所属栏目:百科 来源:网络整理
导读:这是一个片段: NSArray *a = [@[@"a",@"b",@"c"] sortedArrayUsingSelector:@selector(compare:)]; XCode(5.0)给了我以下警告: Creating selector for nonexistent method 'compare:' 如何消除这些警告? 解决方法 此警告与您相关,可以在项目的构建设置中
这是一个片段:

NSArray *a = [@[@"a",@"b",@"c"] sortedArrayUsingSelector:@selector(compare:)];

XCode(5.0)给了我以下警告:

Creating selector for nonexistent method 'compare:'

如何消除这些警告?

解决方法

此警告与您相关,可以在项目的构建设置中禁用.
将值设置为NO并禁用警告.

-Wselector

如果在编译期间找到同一选择器的多个不同类型的方法,则发出警告.检查在编译的最后阶段的方法列表上执行.此外,对出现在@selector(…)表达式中的每个选择器执行检查,并在编译期间找到该选择器的相应方法.由于这些检查仅在编译结束时扫描方法表,因此如果未达到编译的最后阶段,则不会生成这些警告,例如因为在编译期间发现错误,或者因为正在使用-fsyntax-only选项.

这些也可能很有趣:

-Wundeclared选择器

如果找到引用未声明选择器的@selector(…)表达式,则发出警告.如果在@selector(…)表达式之前没有声明具有该名称的方法,则选择器被视为未声明,在@interface或@protocol声明中显式声明,或隐式在@implementation部分中声明.一旦找到@selector(…)表达式,此选项始终执行其检查,而-Wselector仅在编译的最后阶段执行其检查.这也强制执行编码样式约定,即在使用之前必须声明方法和选择器.

-Wstrict选择器匹配

如果在尝试使用此选择器将消息发送到类型为id或Class的接收器时,为给定选择器找到具有不同参数和/或返回类型的多个方法,则发出警告.当此标志关闭时(这是默认行为),如果发现任何差异仅限于具有相同大小和对齐的类型,编译器将省略此类警告.

您可以仅使用某些代码行禁用警告

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wselector"
... code which will ignore the warning
#pragma clang diagnostic pop

或者只为一个文件忽略它

#pragma GCC diagnostic ignored "-Wselector"

发生此错误时,选择器主要是动态创建的.有时我可以创建一个静态选择器:

SEL selector = NSSelectorFromString(@"compare:");
[self fireDelegateSelector:selector];

要么

SEL selector = sel_registerName("compare:");
[self fireDelegateSelector:selector];

Link to documentation.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读