类'Foo'的接口声明重复。

20

我正在处理我的程序,似乎设置中的某些内容发生了改变。突然出现了错误信息“重复接口声明类'Foo'”。它提到了一个头文件被重复,但只有一份副本。

有趣的是,这只在调试模式下出现,而非设备模式下。

有人知道可能出了什么问题吗?

我正在使用Objective-C++和一些静态库。


当你说“调试模式,而不是设备模式”时,你是指构建模拟器还是构建设备,还是指使用调试配置而不是发布配置来构建? - Kris Markel
我曾有过类似的问题。通过清理并构建,问题得到了解决。 - Robert
13个回答

18

我曾遇到完全相同的问题。 我有两份头文件副本,通过在 Xcode 中删除对其中一个副本的引用来删除旧的副本。 然后只有一个指向项目导航器中新头文件的头文件引用。

实际上从文件系统中删除旧的头文件后,问题就解决了。

这可能是Xcode中的bug。 也许有时候当你删除一个文件的引用时,一部分引用仍然存在于项目文件中。


15

我遇到了这个错误消息,但我没有重复的头文件或重复的导入。问题在于我已经重命名了头文件,但是Xcode仍然将它们缓存,从而导致构建错误。

我采取以下措施来修复此问题。希望能帮助那些已经尝试了其他答案但仍然出现错误的人:

  1. 清理项目
  2. 删除“派生数据”(组织者 > 项目选项卡,选择项目并单击删除)
  3. 重新启动Xcode
  4. 构建

11

我找到了问题所在。头文件有两个副本,导致Xcode感到困惑。

现在的谜题是,Xcode如何决定自己复制这些文件的...


和我发生了完全相同的事情。原因未知 :-( - Fulkron
1
我也遇到了同样的问题,但我的类中只有一个文件,现在该如何解决呢?我遇到了麻烦。 - user366584
我在使用OSX Finder时在不同的文件夹中找到了该文件。我不知道为什么Xcode突然决定包含它,但是删除它解决了问题。 - T.J.
我遇到了同样的问题,在两个不同的子文件夹中有相同的标题。 - Alberto Malagoli

7

我曾经遇到过类似的问题,但我没有两个源文件的副本。在我的情况下,我遇到了以下情况:

A类出现了上述错误,并且B类使用了A类的类型属性。

问题在于,在B类中,我在.h和.m文件中都调用了#import "A类"。这在我的情况下引起了上述问题。希望对大家有所帮助。


这正是我的问题。 - swiftache

4

我在所有文件头中将“#include”更改为“#import”,这解决了问题。 我认为当您“#include”一个文件时,您需要编写自己的多重包含保护,而当您使用“#import”时,Xcode会为您处理。


3
这个错误是因为给不同的对象赋相同的变量名导致的。这个错误发生在Xcode 7.0之后。要解决这个问题,只需要在“构建设置(Build Setting)”中搜索“不使用公共块(No Common Blocks)”,将其设置为“NO”,然后重新构建即可避免再次出现此错误。

2
对我而言,这个问题是在我迁移到Cocoapods的use_frameworks!时引起的。我正在导入一个头文件从FBSDKCoreKit到一个方便类中,我用它来扩展方法。这很好,直到我切换到使用框架为止,在使用本地包含(#import "FBSDKAccessToken.h")不再可行;我必须切换到全局包含(#import <FBSDKCoreKit/FBSDKAccessToken.h>)。这篇文章描述了为什么你不再在你的桥接文件中包含头文件,指引我找对了方向。

2
我的问题是这样的。我将pop动画框架添加到我的项目中,但是使用的是xcodeproj而不是xcworkspace。配置后,我能够构建pop-iso-framework目标,但我无法构建我的应用程序目标。后来我意识到,Xcode已将pop类添加到我的应用程序目标的“Build Phases -> Compile Sources”中。从那里删除所有pop类就解决了问题。

2

我也曾遇到过这个问题,当我尝试将一个包含多个自己创建的静态库的工作区进行归档时,项目可以正常构建并在模拟器上运行,但是当我尝试为AdHoc测试构建“Archive”时,就会收到这些重复接口定义错误。解决方法是确保“复制头文件”阶段正确指示了公共/项目/私有头文件。我有一个头文件被错误地设置为“项目”,它需要设置为“公共”,之后,归档成功创建。


1
在我的情况下,问题出现在从另一个项目导入文件以进行重复使用。我没有在复制对话框中小心地选择“如果需要则复制文件”,而是将原始项目中的文件引用到了新项目中,导致问题。一旦我删除了这些引用并正确地重新复制了文件,一切都正常了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接