ios - 创建 NSManagedObject 类时,使用 Coredata 的项目中出现 Apple Mach-O 链接器错误

标签 ios core-data nsmanagedobject build-time

我有一个包含核心数据、基于 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类别/扩展名

enter image description here

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

不要使用Editor > Create NSManagedObject Subclass... 手动生成,否则您将有两个副本和重复的符号。

自动生成的文件位于派生数据文件夹中。您可以使用 Command 单击对象以获取它们的定义。

enter image description here

并且您可能会发现,在添加实体或进行重大更改时,需要一个 Clean->Build 循环才能将其拾取。

如果您不希望这种行为将 Codegen 切换为 Manual/None

注意

2017 年 2 月 - 模板并非 100% 正确,生成的 class func fetchRequest() 由于不明确而无法使用。

关于ios - 创建 NSManagedObject 类时,使用 Coredata 的项目中出现 Apple Mach-O 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027884/

相关文章:

ios - 在没有WebView的应用程序中加载Youtube视频

ios - 如何在一对多核心数据关系中获取特定数据?

ios - 新的 NSManagedObject 子类与新的 NSObject 子类?

iphone - 为什么除非我首先访问父类的描述,否则 NSManagedObject 关系对象无法正确加载?

ios - 以编程方式确定 iPad 模态视图的大小

ios - 围绕 iOS 中的对象展开思考

ios - 如何使用.xcdatamodel使用复合谓词创建获取请求模板

iphone - 如何修复 ‘NSObjectInaccessibleException’ 获取请求在被 NSManagedObjectContext 使用之前无法响应 -entity'

ios - 在将实体保存到核心数据 swift4 之前检查实体是否存在。

objective-c - 在 Core Data 中存储负整数