向核心数据实体添加属性

Posted

技术标签:

【中文标题】向核心数据实体添加属性【英文标题】:Adding an Attribute to a Core Data Entity 【发布时间】:2013-02-08 19:17:59 【问题描述】:

这已经讨论了很多,但我发现没有任何帮助我......我只想将单个属性添加到单个实体。当然不会丢失我的数据。

To do that, I followed these steps

但我认为它根本不起作用。只要不尝试使用新属性就没有错误。但是在我的核心数据模型中(当我在 XCode 中打开 .xcdatamodel 时)它就在那里,甚至在我的实体的 NSManagedObject 子类中,新属性也作为属性存在。但是当我尝试使用它时,会发生这种情况:

unrecognized selector sent to instance 0x74f8520

the entity Name is not key value coding-compliant for the key "isFavoriteName".'

“isFavoriteName”键是我刚刚添加的。就像我说的,我完成了所有步骤。我错过了什么吗? 我认为,新的模型版本没有被使用,因为当我删除模型中的一些属性时,我的应用程序仍然可以工作并且仍然显示删除的信息......我已经将当前的核心数据模型版本设置为新的(第 6 步)。

希望你能帮帮我!

尼克

编辑:我可能还需要更改代码中的某些内容吗?除了在创建 persistentStoreCoordinator 时设置选项...因为我有,比如说 myApp.xdatamodel 并且在其中,我知道有 myApp.xdatamodel 和 myApp 2,xdatamodel... 但我的代码我仍然会做:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myApp" withExtension:@"mom"];

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

【问题讨论】:

【参考方案1】:

没错-您链接到的页面遗漏了适用于您的情况的步骤。即使您创建了模型的新版本,您的代码仍会按名称加载旧版本。

不要只是将其更改为加载版本 2。改为这样做:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myApp" withExtension:@"momd"];

这将查看momd 文件夹并获取当前版本。在这种情况下,它将获得版本 2。如果您将来再次更改模型,它将获得当时的任何版本。

【讨论】:

您好,感谢您的 anwnser,但我看不出您和我的代码之间的区别...? 啊我找到了:withExtension:@"mom"] 应该是 withExtension:@"momd"]... 这只是一个小变化,我之前没有注意到。现在它起作用了!非常感谢 =)

以上是关于向核心数据实体添加属性的主要内容,如果未能解决你的问题,请参考以下文章

向实体添加属性后快速核心数据崩溃

为啥向核心数据实体添加双重属性会导致远距离相关实体中的属性冲突出现 NSInternalInconsistencyException?

核心数据异常:向实体添加新属性后出现 SQLite“没有这样的列”错误

向核心数据类添加自定义方法

核心数据 - 向 xcddatamodel 文件添加额外属性后应用程序崩溃

使用表格视图将两个属性的信息添加到单个核心数据实体中的有效方法