无法创建托管对象的子类
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 子类作为普通对象
关于protected在子类创建父类对象无法访问父类protected方法或成员
Swift Core Data:自动生成托管对象子类使类名在模型中为 PRODUCT_MODULE_NAME.entityName