创建 NSManagedObject 子类导致链接器错误重复符号

Posted

技术标签:

【中文标题】创建 NSManagedObject 子类导致链接器错误重复符号【英文标题】:Creating NSManagedObject subclass leads to linker error duplicate symbols 【发布时间】:2017-01-07 12:36:47 【问题描述】:

我正在尝试通过转到编辑器菜单然后选择创建 NSManagedObject 子类来创建一个 nsmanagedobject(用户)...这会生成四个文件:

User+CoreDataClass.h
User+CoreDataClass.m
User+CoreDataProperties.h
User+CoreDataProperties.m

在我的一个视图控制器中,我导入 User+CoreDataClass.h,然后使用以下代码:

//create new account entity
    User* thisUser = [NSEntityDescription
                            insertNewObjectForEntityForName:@"User"
                            inManagedObjectContext:self.myController.myDataManager.managedObjectContext];

当我构建应用程序时,我收到以下 clang 错误:

duplicate symbol _OBJC_CLASS_$_User in:
    /Users/xxxxxxxxxxxx/Library/Developer/Xcode/DerivedData/StarDate-fzkjccyoiwhfvvczdwkvkmtbioqw/Build/Intermediates/StarDate.build/Debug-iphonesimulator/StarDate.build/Objects-normal/x86_64/User+CoreDataClass.o
duplicate symbol _OBJC_METACLASS_$_User in:
    /Users/xxxxxxxxxxxx/Library/Developer/Xcode/DerivedData/StarDate-fzkjccyoiwhfvvczdwkvkmtbioqw/Build/Intermediates/StarDate.build/Debug-iphonesimulator/StarDate.build/Objects-normal/x86_64/User+CoreDataClass.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我尝试清理应用程序并删除我的派生数据,但没有任何结果。我可以清除错误的唯一方法是删除生成的文件。这显然不是我需要的。为什么 XCode 会从此菜单命令创建重复文件?有没有我错过的设置?

谢谢

【问题讨论】:

【参考方案1】:

您正在手动创建 Xcode 8 已经为您创建的 NSManagedObject 子类,因此会得到重复的符号。

你可以在this answer找到详细的解决方法。

【讨论】:

谢谢,我实际上只是在另一个线程中阅读了解决方案。虽然给了你凹凸。 :)

以上是关于创建 NSManagedObject 子类导致链接器错误重复符号的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObject 子类属性

NSManagedObject 子类的 Swift 链接器错误实现具有所需初始化的协议

为啥自动创建的 NSManagedObject 子类没有“正确”标题?

无法创建 NSManagedObject 子类

NSManagedObject 有没有办法将创建的子类导入 xcdatamodel 文件

创建 NSManagedObject 子类,创建名为我的项目的类