如何向数据模型文件创建的 NSManagedObject 子类添加属性?

Posted

技术标签:

【中文标题】如何向数据模型文件创建的 NSManagedObject 子类添加属性?【英文标题】:How to add attributes to an NSManagedObject subclass created by the data model file? 【发布时间】:2014-04-09 12:52:31 【问题描述】:

我有一个基本的笔记应用程序,我正在学习使用 Core Data,所以我学到的是现在所有属于我的 MVC 的模型,比如 Note.hNote.m现在将通过实体通过 Core Data 的数据模型文件创建便笺的数据。所以我创建了一个Note 实体,我给它一个NSString content 属性并创建了一个NSManagedObject 子类(就像他们在斯坦福视频中教的那样),但我想知道现在我是否想添加一个Note 模型的新属性我该怎么做?我应该手动将它添加到 Core Data 的数据模型文件中,而不是手动添加到 Note.h.m 文件中吗?这个编辑器的创作让我有点困惑。

【问题讨论】:

【参考方案1】:

核心数据实体发生变化后,您必须重新创建托管对象子类 通过 Xcode 菜单中的“Editor -> Create NSManagedObject Subclass ...”创建文件。手动 编辑这些文件只会有引入错误的危险。

或者,使用"mogenerator" 等工具自动创建和更新文件。 请参阅(例如)Mogenerator and Xcode 4 advantages/disadvantages 以了解“mogenerator”与内置 Xcode 之间的比较 文件生成。

【讨论】:

创建类别可以解决这个问题吗? @Martin R @user3508380:如果您想向类添加附加实例变量(它们不是核心数据模型的一部分),那么类别是一种可能的解决方案,而“发电机”是另一种可能的解决方案。如果您向 model 添加新属性,那么您应该重新创建文件(但这似乎是基于意见的)。 MOGenerator 是要走的路【参考方案2】:

您可以通过不同的方式实现它...最简单的方法是将属性添加到您的实体,然后 1) 手动将新属性插入到您的 Note 子类或 2) 使用 Xcode 为您完成。

如果你按照第二种方式,使用Editor -> Create NSManagedObject Subclass ...,Xcode 会要求你覆盖现有文件。因此,如果您对这些文件进行了自定义,它们就会消失...

我个人的口味。我更喜欢第一种方式。手动的。

一个重要的注意事项如下。如果您已经有一个已经设置了持久存储的应用程序,然后您更改了模型,那么当您重新启动该应用程序时,它会崩溃,因为这两个模型之间存在差异。解决方案是或删除应用程序并再次运行它或使用轻迁移。例如how-to-perform-a-lightweight-core-data-migration

【讨论】:

【参考方案3】:

是的,您应该手动将其添加到 Core Data 的数据模型文件中,而不是手动添加到 Note.hNote.m 文件中。

【讨论】:

以上是关于如何向数据模型文件创建的 NSManagedObject 子类添加属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中使用 CoreData 更改数据值?

如何在 Django 中向模型添加临时字段?

如何向不需要模型实例的模型添加函数?

如何向Keras的层喂入数据

创建核心数据模型设计的最佳方法是啥?

当我的模型状态无效时,如何向输入元素添加 CSS 类?