无法创建托管对象的子类

Posted

技术标签:

【中文标题】无法创建托管对象的子类【英文标题】:can not create subclasses of managed objects 【发布时间】:2016-11-17 09:48:25 【问题描述】:

来自 documentation (What's New In Core Data)

Xcode 自动子类生成 Xcode 现在支持在建模工具中自动生成 NSManagedObject 子类。在实体检查器中: Manual/None 是默认的,也是以前的行为;在这种情况下,您应该实现自己的子类或使用 NSManagedObject。 Category/Extension 在名为 ClassName+CoreDataGeneratedProperties 的文件中生成类扩展。您需要声明/实现主类(如果在 Obj-C 中,扩展可以通过头文件导入名为 ClassName.h)。 - 类定义生成命名为 ClassName+CoreDataClass 的子类文件以及为 Category/Extension 生成的文件。 生成的文件放置在 DerivedData 中,并在保存模型后的第一次构建时重新构建。它们也被 Xcode 索引,因此通过命令单击引用和按文件名快速打开是可行的。

无论我选择什么,它都不会生成。

我可能做错了什么或不完整,不是吗?

【问题讨论】:

【参考方案1】:

如果您将“Codegen”设置为“Class Definition”,就像在您的示例中一样,Xcode 确实会生成 NSManagedObject 子类,但您实际上并没有在您的项目中看到。就像您发布的报价中所述,文件是在

中生成的

~/Library/Developer/Xcode/DerivedData/...

您在项目中看不到它们,只有派生数据中的文件,您不必关心这些文件。 Xcode 确实有一个引用,所以命令+单击代码会按预期跳转到实现,而且您可以编写扩展等。

在this answer中查找详细信息。

【讨论】:

这是否意味着我不应该查看/更改文件?我的意思是,如果更改文件是个好主意,明智的 xcode 会向我显示文件。 聪明的 Xcode 声称可以神奇地改变它们。是的,您在项目中看不到它们,只有派生数据中的文件,您不必关心这些文件。 Xcode 确实有一个引用,所以命令+单击代码会按预期跳转到实现。

以上是关于无法创建托管对象的子类的主要内容,如果未能解决你的问题,请参考以下文章

托管对象之外的 NSManagedObject 子类作为普通对象

子类化一个 NSManagedObject 子类

关于protected在子类创建父类对象无法访问父类protected方法或成员

使用工厂方法创建子类对象

JAVA中如何对父类对象强制转换子类对象的引用

Swift Core Data:自动生成托管对象子类使类名在模型中为 PRODUCT_MODULE_NAME.entityName