我有一个包含核心数据、基于 Storyboard和 3 个类的项目。 Core Data 的目的是在 MapKit 上保存位置,但是当我创建类“Spot”(NSManagedObject 的子类)时,我得到了这个构建时错误。它说:
duplicate symbol _OBJC_METACLASS_$_Spot in:
/Users/vitorferreira/Library/Developer/Xcode/DerivedData/CoreDataCity-buwqjxltijduybepebqqghhkrqwe/Build/Intermediates/CoreDataCity.build/Debug-iphonesimulator/CoreDataCity.build/Objects-normal/i386/Spot.o
/Users/vitorferreira/Library/Developer/Xcode/DerivedData/CoreDataCity-buwqjxltijduybepebqqghhkrqwe/Build/Intermediates/CoreDataCity.build/Debug-iphonesimulator/CoreDataCity.build/Objects-normal/i386/Spot+CoreDataClass.o
ld: 2 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
在之前的评论中(这是一个经过编辑的问题)-据说原因是库中的代码重复......但老实说我不明白......任何帮助都会非常感激
最佳答案
Xcode 8.2(或更早版本)默认创建 NSManagedObject
子类文件,如果您将实体 Codegen
模式设置为 Class Definition
或 类别/扩展名
。
因此,如果您将实体设置为此模式……
不要使用Editor > Create NSManagedObject Subclass... 手动生成,否则您将有两个副本和重复的符号。
自动生成的文件位于派生数据文件夹中。您可以使用 Command 单击对象以获取它们的定义。
并且您可能会发现,在添加实体或进行重大更改时,需要一个 Clean->Build 循环才能将其拾取。
如果您不希望这种行为将 Codegen
切换为 Manual/None
注意
2017 年 2 月 - 模板并非 100% 正确,生成的 class func fetchRequest()
由于不明确而无法使用。
关于ios - 创建 NSManagedObject 类时,使用 Coredata 的项目中出现 Apple Mach-O 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027884/