【发布时间】:2012-09-07 02:23:00
【问题描述】:
我正在帮助一个 iOS 项目,其中包含许多 AppDelegate 中许多不同类共有的方法和定义。因此,在每个类中,在 .h 文件中,我使用 #import "AppDelegate.h"。这工作正常,直到我需要访问已经将 AppDelegate 导入另一个导入 AppDelegate 的类中的一个类。此时,我收到 AppDelegate 的重复接口定义错误。
好的,这看起来很公平。我已经将 AppDelegate 导入到我正在导入的文件中,因此 AppDelegate 正在从两个不同的地方导入。所以我删除了 AppDelegate 行,一切都很好。
但是当我需要导入两个都需要导入 AppDelegate 的类时会发生什么?
我有一个非常具体的问题,我正试图解决这个问题,我知道它是由与此有关的某些事情引起的,但我不确定是什么。所以我希望我能弄清楚我应该如何处理这种导入,并将其他所有内容整理出来,并希望这能解决我的问题。因此,更具体地说:
我有 ClassA.h、ClassB.h 和 ClassC.h。都有#import“AppDelegate.h”。当我需要在 ClassA 中使用 #import "ClassB.h" 时,我会从 ClassA 中删除 #import "AppDelegate.h" 行。一切顺利。但是如果我还需要#import "ClassC.h" 到 ClassA 中,但 ClassB 和 ClassC 需要有 #import "AppDelegate.h" 会发生什么?
编辑:
我在一个干净的项目中尝试了我上面描述的确切场景,它构建得很好,所以还有其他东西在起作用。但是我可以肯定地说,这个问题之前在这个项目中出现的时候,是一个重复的AppDelegate接口定义,当我删除#import“AppDelegate.h”这一行时,错误消失了,我仍然可以通过其他导入的文件访问 AppDelegate.h 方法和枚举。
【问题讨论】:
-
您确定您使用的是
#import而不是#include吗?#import设计为永远不会两次导入相同的头文件,因此编译器 #import "AppDelegate.h" 两次似乎不合逻辑 -
100% 确定。我的谷歌研究也说了同样的话。过去我遇到过类似的问题,我可以通过将文件包含在 .m 而不是 .h 中来解决这个问题,但不幸的是,我需要访问导入 .h 中导入文件中的枚举,所以这不是一个选择。
-
但是我刚刚制作了一个示例应用程序,完全符合我在底部描述的场景,并且它有效。所以我想这里还有别的东西在起作用。但是我可以肯定的说,以前这个问题出现的时候,是AppDelegate的重复接口定义,当我去掉#import "AppDelegate.h"这一行,错误就消失了,我还是有通过其他导入文件访问 AppDelegate.h 方法和枚举。
-
将枚举写入单独的 *.h 文件并在需要的地方导入它们。
-
但是我还需要使用AppDelegate中的方法。那我应该在 .m 文件中导入 AppDelegate 吗?
标签: objective-c ios xcode