objective-c – 获取“重复的界面定义”错误,绝对必须#importing头文件

我正在为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”行。一切顺利但是如果我还需要将“ClassC.h”导入ClassA,但是ClassB和ClassC需要#import“AppDelegate.h”,会怎么样?

编辑:

我在一个干净的项目中尝试了上面描述的确切场景,并且它建立得很好,所以还有其他的东西在玩。但是我可以肯定地说,当这个问题出现在这个项目之前,它是AppDelegate的一个重复的接口定义,当我删除了#import“AppDelegate.h”行时,错误消失了,我还是通过其他导入的文件访问AppDelegate.h方法和枚举。

解决方法

最好的预防和治疗方法是遵循关于何时从头文件导入的一些准则。作为一般规则,除非在这些情况下,不要从Objective-C头进行导入:

>您需要扩展在另一个标题中声明的类。
>您需要声明符合另一个声明的协议
头。
>您需要引用在公共方法和/或属性中的另一个标头中定义的非类,非协议类型。要引用协议和类,forward使用@class或@protocol声明它们,如@class ClassFromOtherHeader;

每个其他#import应该在你的实现。我的建议是根据这些规则,将所有的#import语句从头文件移动到实现文件中。从你认为的问题的根源开始,向外移动。这将解决您的问题,并为您提供更清晰的代码和更快的构建时间的副作用。

相关文章

在有效期内的苹果开发者账号(类型为个人或者公司账号)。还...
Appuploader官网--IOS ipa上传发布工具,证书制作工具跨平台...
苹果在9月13号凌晨(北京时间)发布 iOS 16,该系统的设备可...
计算机图形学--OpenGL递归实现光线追踪
Xcode 14打出来的包在低版本系统运行时会崩溃,报错信息是Li...