【问题标题】:NSManagedObject subclasses duplicate declarationNSManagedObject 子类重复声明
【发布时间】:2017-03-12 22:13:48
【问题描述】:

所以,当我的数据模型准备好时,我尝试在我的数据模型文件打开时生成子类:

编辑器 -> 创建 NSManaged 对象子类

好了,生成了两个文件,一个是类声明,一个是属性。

但是,我立即被提示我重新声明了一个已经存在的类。这是原始生成的文件所在的位置: previously generated files

我的问题很明显:

  1. 这两个文件是什么时候生成的?
  2. 如果我想将这些文件放在我的项目导航器中,当然还有与我的 ViewController 相同的文件夹,该怎么办?

【问题讨论】:

标签: swift core-data swift3 xcode8 ios10


【解决方案1】:

对核心数据模型上的现有实体进行更改是很常见的。

假设您将字段添加到核心数据模型中的现有实体,则必须为该实体重新生成类以包含该字段。

当重新生成该类时,会有一个选项来覆盖现有文件。

回答您的问题:

  1. 它可能是在上一次实体更改时创建的。
  2. 将之前生成的文件移动到桌面。然后生成新文件。查看两组文件之间的区别并采取适当的措施。如果我没记错的话,一个文件是扩展名,一个是类文件。

【讨论】:

    【解决方案2】:

    您正在生成 Xcode 已经为您生成的文件,因此会得到重复的声明。

    this answer中查找详细信息。

    【讨论】:

    • 使用类定义的一个问题是,当插入手机并将构建设备更改为它时,自动生成的子类文件会自动丢失那里的引用——即——xcode会提示没有定义你的ViewController中使用的核心数据类的错误。
    • 使用上述设置在此处构建良好。如果您的问题仍然存在,可以发布一个指向显示该问题的最小示例项目的链接,以便我们查看。
    【解决方案3】:

    所以,正确答案似乎是对我的问题发表评论的那个人。原帖在这里:https://stackoverflow.com/a/39933534/5642467.

    从您的项目中删除所有生成的 NSManagedObject 子类(如果存在)。

    在您的 .xcdatamodel 中为所有实体设置 Codegento Manual/None 清理项目。---这是关键步骤,Xcode8默认设置为自动。

    清理 DerivedData 文件夹

    重启 Xcode

    手动生成 NSManagedObject 子类(在“编辑器”菜单中)

    确保将这些文件添加到您的项目中 构建

    如果您的问题仍然存在,请重复:

    清理项目

    清理 DerivedData 文件夹

    重启 Xcode

    【讨论】:

      【解决方案4】:

      在您的 xcdatamodeld 中,您必须在编译前在实用程序面板中将实体类 Codegen 修改为 Manual/None

      【讨论】:

        猜你喜欢
        • 2016-03-07
        • 2019-01-21
        • 1970-01-01
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        相关资源
        最近更新 更多