如何向数据模型文件创建的 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.h
和 Note.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.h
和 Note.m
文件中。
【讨论】:
以上是关于如何向数据模型文件创建的 NSManagedObject 子类添加属性?的主要内容,如果未能解决你的问题,请参考以下文章