CoreData类的无效重新声明

64

我正在使用CoreData,处理名为“RoleName”的实体。

问题是:当我从模型内部单击“创建NSManagedObject子类”时,它会自动为我的实体创建类。

然而,在类的声明中,我遇到了这个错误:

无效的重新声明“RoleName”

尽管我没有任何其他同名的类。


你找到解决方案了吗?你正在使用Xcode8和iOS 10吗? - FBC
是的,我是,目前还没有解决方案。 - dpstart
Deepukjayan的答案应该适用于您。它对我有效。 - Prashant Bhayani
2个回答

177

这是因为Xcode自己处理了所有的事情。但我感到有些麻烦,因为自动生成的类并没有包括我所有的属性。

所以按照以下步骤使其恢复原状:

  • 删除你已经为core data创建的任何类。
  • 将class.Module设置为当前产品模块 进入图像描述

  • 将Class.codegen设置为手动/无

进入图像描述

  • 现在选择你的实体并创建NSmanagedobject子类 进入图像描述

  • 你就可以开始使用了


5
“当前产品模块”步骤非常必要。谢谢@Deepukjayan。 - GKK
5
太棒了!不需要执行这一步骤“删除您已经为核心数据创建的任何类”。 - AamirR

18

来自苹果公司:Core Data 有哪些新变化

Xcode 自动生成子类

Xcode 现在支持在建模工具中自动生成 NSManagedObject 子类。在实体检查器中:

手动 / 无 是默认设置和以前的行为;在这种情况下,您应该实现自己的子类或使用 NSManagedObject。 类别 / 扩展 会生成一个类扩展,文件名为 ClassName+CoreDataGeneratedProperties。您需要声明 / 实现主类(如果是 Obj-C,则通过扩展可以导入名为 ClassName.h 的头文件)。 类定义 会生成子类文件,文件名为 ClassName+CoreDataClass,以及为类别 / 扩展生成的文件。

生成的文件放置在 DerivedData 中,并在保存模型后第一次构建时重新生成。它们也被 Xcode 索引,因此可以通过命令单击引用并通过文件名快速打开。

您无需手动创建 NSManagedObjects 的子类。

我建议您删除使用 NSManagedObjects 创建的文件(将它们移到废纸篓中),然后在数据模型检查器下的每个实体中选择 Codegen:手动 / 无,并创建子类。


抱歉我的问题没有表达清楚。无论如何,我已经自动生成了子类。 - dpstart
如果我理解正确的话,当使用模块“全局命名空间”(默认)和类定义或类别/扩展进行配置时,Xcode会自动为实体创建一个类定义,并将其存储在派生数据中,不会作为项目中的“普通”.swift文件呈现给用户。通过运行“创建NSManagedObject子类…”而没有指定不同的模块,我们最终会在全局命名空间中创建第二个类定义,因此出现“无效的重新声明”错误。我的理解正确吗? - TMin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接