我在Objective-C中有一堂课:

@interface Category : NSObject
{
// ...
}

一切都很好, 我在3个不同的项目中使用了这堂课,没有问题。

一旦我决定为一个项目创建测试目标。然后发生了奇怪的事情:编译器拒绝使用此错误进行编译:

Redefenition of 'Category' as a different kind of symbol

它也指出 runtime.h

typedef struct objc_category *Category;

好吧,这是合理的。

但是,我不明白为什么它允许我在原始目标和测试目标之间使用该类别以及有什么区别。我已经检查了 Deploy target, iOS SDK, ,所有宏,标题路径, #import <objc/runtime.h> 和两个目标的课程 - 这些几乎相同。

我不想因为在倍数项目中使用它而重构该班级的名字,那么这种行为的原因是什么?

有帮助吗?

解决方案

无论如何,您都应该重新分配此课程的名称,以避免将来发生这种冲突。早日而不是较晚,这会减少痛苦。

您可能导入一个导入的文件 <objc/runtime.h> 在某一点。由于测试目标和常规目标之间的区别是什么,因此在XCode测试上是通过将符号注入捆绑包中的。代码剥离和符号可见性可能存在一些差异,可以解释这种错误。

难怪 Apple推荐使用2或3个字母前缀课程

其他提示

尽管您应该做@olotiar在他的回答中所说的话,但有一个快速解决方案。

去你的项目 构建设置, , 搜索 ”启用模块(C和Objective-C)“并将值设置为 .

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top