加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 01:54:10 所属栏目:百科 来源:网络整理
导读:我正在为iOS项目提供很多方法和定义,这些方法和定义与AppDelegate中许多不同的类通用。所以,在每个这些类中,在.h文件中,我使用#import“AppDelegate.h”。这可以正常工作,直到我需要访问已经将AppDelegate导入到导入AppDelegate的另一个类中的其中一个
我正在为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语句从头文件移动到实现文件中。从你认为的问题的根源开始,向外移动。这将解决您的问题,并为您提供更清晰的代码和更快的构建时间的副作用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读