首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态转发:禁止不完整的实现警告

动态转发:禁止不完整的实现警告
EN

Stack Overflow用户
提问于 2013-01-22 01:37:05
回答 2查看 8.2K关注 0票数 45

我有一个公开一些方法的类,它的实现是由一个内部对象提供的。

我使用前向调用在运行时将方法调用分派给内部对象,但是XCode发出了错误,因为它找不到已声明方法的实现。

我在SO上发现了其他一些类似的问题,但所有这些问题都通过设计更改得到了解决。

我不打算在这里讨论设计,但如果有人对此有什么建议,我有一个关于代码审查的open question,它更适合于这种讨论。

我的问题是,是否存在在XCode中关闭Incomplete Implementation警告的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-22 02:02:20

您可以通过添加以下内容来抑制Incomplete Implementation警告

代码语言:javascript
复制
  #pragma clang diagnostic ignored "-Wincomplete-implementation"

就在@implementation上方

希望这能有所帮助

编辑

在评论中被告知这对某人不起作用,并发现原因是因为他们得到的是一个不同的警告,我已经做了一些尝试,并能够解决这个问题,所以我想我应该更新这个答案,包括他们的和GCC忽略的。因此,对于@Tony的问题,应该可以使用以下方法

代码语言:javascript
复制
  #pragma clang diagnostic ignored "-Wprotocol"

对于任何想知道GCC编译器版本的人来说,它是

代码语言:javascript
复制
  #pragma GCC diagnostic ignored "-Wprotocol"

  #pragma GCC diagnostic ignored "-Wincomplete-implementation"

我还将指出,所有这些编译器也可以通过在每个文件的基础上指定设置来完成,方法是转到XCODE Project >> Target >> Build Phases >> Compile Sources并添加编译器标志,这样您只需添加-WprotocolWincomplete-implementation或任何需要的编译器标志。

希望这个更新对所有人都有帮助,如果还需要的话,我会更新我的答案以包含。

编辑2个

我在这方面做了更多的挖掘,并遇到了Clang Compliler User's Manual,所以我认为这将是有趣的,并对任何在这一领域仍有问题的人有帮助。

我还发现了使用这些#pragma diagnostic ignores的另一种方法,即您可以对它们执行pushpop操作,因此,如果您只想忽略文件的特定部分,而不是全部,那么您可以执行以下操作

代码语言:javascript
复制
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma clang diagnostic pop

请记住,所有这些#pragma编译忽略项也可以与GCC一起使用,因此上面的代码将

代码语言:javascript
复制
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma GCC diagnostic pop

到目前为止,我尝试过的所有diagnostic ignores都可以使用pushpop

另一个是

代码语言:javascript
复制
    #pragma clang diagnostic ignored "UnresolvedMessage"
    #pragma GCC diagnostic ignored "UnresolvedMessage"

用于隐藏未使用的变量的方法是

代码语言:javascript
复制
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma clang diagnostic pop

而GCC的版本是

代码语言:javascript
复制
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma GCC diagnostic pop

忽略来自unavailableInDeploymentTarget的警告的更多说明

代码语言:javascript
复制
    #pragma clang diagnostic push
    #pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
        leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
    #pragma clang diagnostic pop

和performSelector泄露

代码语言:javascript
复制
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [target performSelector:cancelAction withObject:origin];
    #pragma clang diagnostic pop

和不推荐使用的声明

代码语言:javascript
复制
    #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,你可以找到entire list here

票数 78
EN

Stack Overflow用户

发布于 2013-01-22 01:52:13

您可以在类类别接口中声明这些方法:

代码语言:javascript
复制
@interface MyClass (ForwardedMethods)

- (void)doSomething;

@end

(没有该类别的实现)。这样Xcode就不会再抱怨“实现不完整”了。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14444203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档