警告:'…'的重复协议定义被忽略

我应该如何回应这个警告?

警告:'…'的重复协议定义被忽略

我的协议声明在它自己的.h文件中,并且在我的项目中的一些其他文件中被导入。

那么,以防万一,这是整个头文件与协议声明:

#import <Foundation/Foundation.h> @class Wrapper; @protocol WrapperDelegate @required - (void)wrapper:(Wrapper *)wrapper didRetrieveData:(NSData *)data; @optional - (void)wrapperHasBadCredentials:(Wrapper *)wrapper; - (void)wrapper:(Wrapper *)wrapper didCreateResourceAtURL:(NSString *)url; - (void)wrapper:(Wrapper *)wrapper didFailWithError:(NSError *)error; - (void)wrapper:(Wrapper *)wrapper didReceiveStatusCode:(int)statusCode; @end 

感谢您的任何build议。

检查以确保您的项目中没有添加头文件两次,或两个不同的文件都实现该协议。 这是导致警告出现在我身上的原因。

是的,我有同样的问题。 我无法在Xcode项目中find重复的头文件。 但是当我通过Xcode的发现者,我发现在项目中的协议的2头文件。 删除一个解决了问题。 谢谢。

只是为了补充现有的答案,我遇到的具体问题。

基本上,编译器没有说谎。 它发现一个以上的定义,类,协议,枚举,定义,或任何存在的有问题的头文件。

错误可能是头文件和头searchpath的组合。

起初,这些问题似乎令人费解,因为我们知道#import语句只会导入尚未实现的文件。 因此,不像#include ,这个问题不应该发生,对吧?

#import工作。 然而,如果你的头文件设置不正确,那么虽然它可能会遇到一个具有相同名字的文件,比如MyLibrary.h ,如果这个文件存在于两个不同的地方,这两个地方都在头文件searchpath中,那么Xcode会认为它们是两个不同的文件。

在我的情况下,我有一个静态库构build阶段复制公共标题。

在这里输入图像说明

从属产品search上面的文件夹 – 在生成设置中定义为include/$(TARGET_NAME)我的项目的源文件夹。

这意味着两个不同的文件夹 – 包括文件MyLibrary.h在标题searchpath中。 该文件中的所有内容都会导致重复或重新定义编译器警告或链接器错误。

TLDR:相同的文件可能在两个不同的文件夹中,并且都在您的标题searchpath中。 检查你的path,如果你已经将一个静态库合并到项目或工作区中,那么作为调查的一部分,还要检查公共头文件的复制位置。