我想在一个 NSObject 实例上使用选择器而不需要实现协议(protocol)。例如,如果调用它的 NSObject 实例支持,则应该设置一个错误属性的类别方法。这是代码,代码按预期工作:
if ([self respondsToSelector:@selector(setError:)])
{
[self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]];
}
但是,编译器没有看到任何带有 setError: 签名的方法,所以它给了我一个警告,对于包含 @selector(setError:)
的每一行片段:
Undeclared selector 'setError:'
我不想声明一个协议(protocol)来消除这个警告,因为我不希望所有可能使用它的类来实现任何特殊的东西。按照惯例,我希望他们拥有 setError:
方法或属性。
这可行吗?怎么样?
干杯,
EP
最佳答案
另一种选择是禁用警告:
#pragma GCC diagnostic ignored "-Wundeclared-selector"
您可以将此行放在出现警告的 .m 文件中。
更新:
它也适用于 LLVM,如下所示:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
... your code here ...
#pragma clang diagnostic pop
关于objective-c - 如何摆脱 'undeclared selector' 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6224976/