dynamic转发:取消“不完整实施”警告

我有一个类暴露了一些方法,其实现是由一个内部对象提供的。

我正在使用forward调用来在运行时调度内部对象的方法调用,但XCode抱怨,因为它找不到声明的方法的实现。

我发现了其他一些类似的问题,但所有这些问题都是通过devise更改来解决的。

我并不是要在这里讨论这个devise,但是如果有人对此有所build议的话,我对Code Review有一个公开的问题 ,比较适合这种讨论。

我的问题是这里是否存在closuresXCode中的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" 

我还要指出,所有这些diagnotstic ignores也可以通过指定XCODE Project >> Target >> Build Phases >> Compile Sources并添加一个编译器标志来指定每个文件的设置来完成,添加-WprotocolWincomplete-implementation或任何你需要的编译器标志。

希望这个更新有助于所有如果需要我会更新我的答案,包括。

编辑2

我正在做一些更深入的研究,发现了Clang Compliler用户手册,所以我认为这对于那些在这个领域仍然存在问题的人来说会是有趣和有益的。

我还发现另一种方式,你可以使用这些#pragma diagnostic ignores ,那就是你可以pushpop它们,所以如果你想忽略文件的特定部分,而不是全部,那么你可以做以下

  #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 

pushpop似乎与我迄今尝试的所有diagnostic ignores一起工作。

另一个是

  #pragma clang diagnostic ignored "UnresolvedMessage" #pragma GCC diagnostic ignored "UnresolvedMessage" 

抑制未使用的variables是

  #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 

并执行select器泄漏

  #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你可以在这里find整个列表

您可以在类别界面中声明方法:

 @interface MyClass (ForwardedMethods) - (void)doSomething; @end 

(没有该类别的实施)。 那么Xcode不会再抱怨“不完整的实现”了。