我有一个类公开了一些方法,它们的实现是由一个内部对象提供的。
我在运行时使用前向调用来调度内部对象的方法调用,但XCode抱怨,因为它找不到声明的方法的实现。
我在SO上发现了一些其他类似的问题,但它们都通过设计更改解决了。
我不想在这里讨论设计,但是如果有人有什么建议,我有一个关于代码审查的开放问题,这更适合这种讨论。
我的问题是这里是否有一个方法来关闭Incomplete Implementation
警告在XCode存在
可以通过添加
来抑制Incomplete Implementation
警告 #pragma clang diagnostic ignored "-Wincomplete-implementation"
刚好在@implementation
之上
希望有帮助
编辑
在评论中被告知这对某人不起作用并找出原因是因为这是他们得到的不同警告,我已经做了一些游戏并且能够解决那里的问题,所以我想我会更新这个答案以包括他们的和GCC
忽略。因此,对于@Tony
的问题,以下应该可以工作
#pragma clang diagnostic ignored "-Wprotocol"
对于任何想知道GCC
编译器版本的人来说,它是
#pragma GCC diagnostic ignored "-Wprotocol"
#pragma GCC diagnostic ignored "-Wincomplete-implementation"
我还将指出,所有这些diagnotstic ignores
也可以通过指定每个文件的设置来完成,通过转到XCODE Project >> Target >> Build Phases >> Compile Sources
并添加编译器标志,因此您只需添加-Wprotocol
或Wincomplete-implementation
或任何您需要的编译器标志。
希望这个更新对所有人都有帮助,如果再需要的话,我会更新我的答案,包括。
编辑2
我在这方面做了更多的挖掘,看到了Clang编译器用户手册,所以我认为这将是有趣的,并有助于任何人在这方面仍然有问题。
我还发现了另一种使用#pragma diagnostic ignores
的方法也就是push
和pop
所以如果你只想忽略文件的特定部分而不是全部那么你可以这样做
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
// And pop the warning is gone.
char b = 'fa';
#pragma clang diagnostic pop
请记住,所有这些#pragma
编译忽略也可以与GCC
一起使用,所以上面的
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmultichar"
// And pop the warning is gone.
char b = 'fa';
#pragma GCC diagnostic pop
push
和pop
似乎与我迄今为止尝试过的所有diagnostic ignores
一起工作。
另一个是
#pragma clang diagnostic ignored "UnresolvedMessage"
#pragma GCC diagnostic ignored "UnresolvedMessage"
用于抑制未使用的变量的是
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
NSString *myUnusedVariable;
#pragma clang diagnostic pop
和GCC版本
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
NSString *myUnusedVariable;
#pragma GCC diagnostic pop
忽略来自unavailableInDeploymentTarget
的警告 #pragma clang diagnostic push
#pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
#pragma clang diagnostic pop
和performSelector泄漏
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[target performSelector:cancelAction withObject:origin];
#pragma clang diagnostic pop
和不支持的声明
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered target:self action:@selector(customButtonPressed:)];
#pragma clang diagnostic pop
多亏了DanSkeel
,你可以在这里找到完整的列表
可以在类类别接口中声明方法:
@interface MyClass (ForwardedMethods)
- (void)doSomething;
@end
(没有该类别的实现)。这样Xcode就不会再抱怨"实现不完整"了