在Objective-C中,有没有一种方法可以指定要@selector()使用的选择器定义?
|
当我尝试将@selector(xxx)与未在同一源文件中实际定义的任何方法一起使用时,Xcode 4给我(“无用的选择器\'xxx \'\”)错误(而不是无益的)。如果我将LLVM编译器警告\“ Selector的多种定义类型\”设置为\“ No \”,该错误就会消失(至少对于项目构建而言)。 (这是iOS的默认设置,但已为我的项目启用了该功能。)但是,即使禁用了此功能,如果在“构建设置”对话框中选中“启用实时问题”,错误仍会在编辑器中显示。
因此,现在我关闭了直播问题,以免分散您的注意力,这有点令人失望。我的问题是:是否可以通过指定我要使用的选择器定义来摆脱错误?还是重要,即方法的所有定义在Objective-C中共享相同的选择器吗?这是一个编译器错误,还是我应该忽略的虚假设置? (如果是后者,为什么还要在新编辑器中启用实时构建功能?)
这是代码,请清楚一点:
if ([recognizer respondsToSelector:@selector(translationInView:)]) {
...
}
这是错误:
error: unimplemented selector \'translationInView:\' [-Wselector,2]
if ([recognizer respondsToSelector:@selector(translationInView:)]) {
^
如果将\'translationInView:\'替换为同一源文件中定义的方法,则不会有错误。我已经导入了定义此方法的标头,并尝试在此源文件中的类别中声明该方法。没关系
我暂时不要发出警告,实时发布并继续进行下去,但是我很想为这个问题找到一个更好的解决方案。至少,我想了解一下Objective-C的@selector是否具有用于选择方法的特定定义的语法,因为到目前为止我在任何地方都没有发现任何迹象。
谢谢!
没有找到相关结果
已邀请:
4 个回复
艾食魄轻县
这些方法都具有完全相同的选择器
。 我相信问题是当您引用“ 4”时,编译器告诉您它从未在任何地方看到任何具有该选择器的方法,尽管我不确定,因为您没有粘贴您的确切的错误。您应确保声明此方法的头文件实际上已导入到当前文件中。或者,如果不能这样做,则可以始终在NSObject的类别中声明该方法,如下所示:
这将告诉编译器该选择器存在,尽管它还会产生副作用,使您可以在没有警告的情况下对该文件中的任何对象调用ѭ6((当然,这在运行时仍会失败)。
蹄寄噬非芹
钾涎净介
请注意,默认情况下未设置此标志,因此必须以某种方式将其添加到构建配置中才能使您现在看到警告。
痰嫉