为什么GCC -Wselector和-Wundeclared-selector警告声明的选择器?

时间:2012-02-06 22:55:27

标签: ios objective-c gcc warnings

GCC -Wselector-Wundeclared-selector选项的说明使它们听起来像是一个很棒的编程工具,可以防止Objective-C @selector()表达式中的拼写错误。

但是,在我的代码库上启用它们后,我收到如下警告:

Unimplemented selector 'reloadData'

指向这样的行:

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

这行代码在我们的代码库中相当常见。数据是异步加载的,一旦加载,上面的代码行用于指示UITableView重新加载(在主线程上,因为从后台线程调用UIKit是一个坏主意)。

我的问题是多部分:

  1. 以上代码行是否以某种方式不正确?是否有更好的模式用于在主线程上发信号UITableView来重新加载其数据?
  2. UITableView.h选择器在reloadData中明确声明时,为什么海湾合作委员会会对此发出警告?
  3. 有没有办法让GCC警告未申报的选民,而不会让他抱怨明确宣布的选民?

1 个答案:

答案 0 :(得分:3)

是的,我是-Wundeclared-selector的粉丝。我没有看到这个问题突然出现。您在此特定文件(或.pch中)中#import <UIKit/UIKit.h>了吗?我无法在-Wundeclared-selector的简单程序中重现此问题。

  • 使用Storyboard创建单视图iOS项目
  • 在主视图上删除UITableView。连接到tableView IBOutlet
  • 启用“未声明的选择器”警告
  • 将您的代码行放入viewDidLoad
  • 构建

reloadData更改为reloadDat,我收到警告(正如预期的那样):

Undeclared selector 'reloadDat'

你说你得到的是“未实现的选择器'reloadData'。”这真的是警告,还是你打算输入“Undeclared?”

相关问题