NSManagedObject 子类中的重复符号错误

Duplicate Symbol Error in NSManagedObject Subclass

我只是简单地用 Core Data 创建了一个演示项目。

我在我的数据模型中创建了一个实体 Userinfo。现在我创建了这个实体的 NSManagedObject 子类。

Xcode 自动生成了这 4 个 类。

现在当我构建项目时它抛出这个错误:

我已尽我所能消除重复错误,但没有任何帮助。

我认为这是一个 Xcode 错误。请帮忙。

您正在生成的文件已经由 Xcode 为您生成,因此得到了重复的声明。有关此功能(Xcode 8 中的新功能)的详细信息,请参见 this WWDC video

两个可能的修复:

1) 使用 Xcode 生成的 ManagedObject 子类(推荐的现代方法)

  • 从项目中删除所有生成的 NSManagedObject 子类(如果存在)。
  • 在您的 .xcdatamodel 中为所有实体将 Codegen 设置为 Class Definition
  • 确保 Module 为空("Global Namespace" 为浅灰色)(解决方法是一个 Apple 错误,请参阅 this answer

  • 清理项目
  • Clean DerivedData folder(可选。为了节省开支)
  • 建造

注:

切勿将自动生成的文件添加到您的项目中。即使您在项目中看不到生成的文件,Xcode 也有对它的引用,因此您可以编写扩展等。例如:

extension MyEntity {
    func doSomething() {
        //
    }
}

此外,您可以在 Xcode.

内命令+单击生成的文件

2) 手动触发子类生成(一种相当偏执但可靠的方法,忽略新的 Xcode 功能)

  • 从项目中删除所有生成的 NSManagedObject 子类(如果存在)。
  • 在您的 .xcdatamodel 中将所有实体的 Codegen 设置为 Manual/None
  • 清理项目
  • Clean DerivedData folder
  • 重启Xcode
  • 手动生成 NSManagedObject 个子类(在 "Editor" 菜单中)
  • 确保这些文件已添加到您的项目中
  • 建造