我有一个公开一些方法的类,其实现由内部对象提供。
我使用前向调用来将方法调用在运行时分派到内部对象,但XCode投诉说它找不到已声明方法的实现。
我在SO上找到了一些类似的问题,但所有这些问题都通过设计更改解决了。
我并不想在这里讨论设计,但如果有人对此有建议,我在Code Review上有一个开放式问题,更适合这种类型的讨论。
我的问题是这里是否存在一种方法来关闭XCode中的Incomplete Implementation
警告。
我有一个公开一些方法的类,其实现由内部对象提供。
我使用前向调用来将方法调用在运行时分派到内部对象,但XCode投诉说它找不到已声明方法的实现。
我在SO上找到了一些类似的问题,但所有这些问题都通过设计更改解决了。
我并不想在这里讨论设计,但如果有人对此有建议,我在Code Review上有一个开放式问题,更适合这种类型的讨论。
我的问题是这里是否存在一种方法来关闭XCode中的Incomplete Implementation
警告。
你可以通过添加 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"
我还要强调一点,通过在XCODE 项目>>目标>>构建阶段>>编译源代码
中指定设置,也可以针对每个文件进行所有这些diagnotstic ignores
,并添加一个编译器标志,例如-Wprotocol
或Wincomplete-implementation
或其他所需的编译器标志。
希望此更新对所有人有所帮助,如果需要更多信息,我会更新我的答案。
编辑 2
我对此进行了更深入的研究,并找到了Clang Compiler 用户手册,因此我认为这对于仍然在这个领域遇到问题的任何人都是有趣和有用的。
我还发现了另一种使用这些#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就不会再抱怨“不完整的实现”了。