if (self.myDelegate != nil) {
BOOL callDelegate = [self.myDelegate respondsToSelector:@selector(fooDidHappen:WithBar:)];
if (callDelegate) {
[self.myDelegate fooDidHappen:foo withBar:bar];
}
}
就像你看到的那样,我问代表是否响应那个选择器。但是在if-block中只有当委托才响应时才输入,我得到一个愚蠢的警告,表示委托没有响应。当然它没有,因为这段代码只在运行时充分利用。然而,继续使用xcode中的编译器警告是非常糟糕的做法,所以我想告诉编译器忽略它。
在PHP中,您可以编写@anFunction(foo);并且@将确保此功能根本不会给您任何警告。那么是否有一个编译器指令或命令可以围绕该部分键入以消除警告?
答案 0 :(得分:6)
在另一个question人中告诉您如何修复该警告,您为委托声明了一个正式的协议,并将该协议添加到委托的属性声明中。
话虽如此,如果您想要取消警告,您可以使用GCC诊断编译指示:
//Turn the warning off
#pragma GCC diagnostic ignored "-Wundeclared-selector"
if (self.myDelegate != nil) {
BOOL callDelegate = [self.myDelegate respondsToSelector:@selector(fooDidHappen:WithBar:)];
if (callDelegate) {
[self.myDelegate fooDidHappen:foo withBar:bar];
}
}
//Turn the warning back on
#pragma GCC diagnostic warning "-Wundeclared-selector"
注意这需要GCC 4.2.1+或CLANG(并且clang具有我认为的improved版本,但是自从我为它编写补丁后我可能会有偏见。)
答案 1 :(得分:0)
对于如何禁止特定警告的原始问题,我认为的xconfig文件将执行此操作,但我没有找到任何特定的文档(看起来不够努力)