创建NSManagedObject类时,Apple Mach-O链接器在Coredata项目中出错

FuM*_*chu 2 core-data build-time nsmanagedobject ios

我有一个包含Core Data,storyBoard和3个类的项目.Core Data的目的是在MapKit上保存位置,但是当我创建NSManagedObject的子类"Spot"时,我得到了这个Buildtime错误.它说:

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)
Run Code Online (Sandbox Code Playgroud)

在之前的评论中(这是一个经过编辑的问题) - 据说原因是图书馆中存在重复的代码......但老实说,我没有得到它......任何帮助都会得到很大的帮助

War*_*ton 12

NSManagedObject如果您将实体Codegen模式设置为Class Definition或,则默认情况下,Xcode 8.2(或更早版本)会完全无形地自动创建子类文件Category/Extension.

在此输入图像描述

因此,如果您将实体设置为此模式...

不要使用编辑器>创建NSManagedObject子类手动生成...或者您将拥有两个副本和重复的符号.

自动生成的文件位于派生数据文件夹中.您可以命令单击对象以获取其定义.

在此输入图像描述

并且您可能会发现在添加实体或进行重大更改时需要使用Clean-> Build周期来获取实体.

如果您不希望此行为切换Codegen到Manual/None

注意

2017年2月 - 模板不是100%正确,class func fetchRequest()由于模糊不清,生成的模板不可用.