核心数据轻量级迁移属性重命名

Posted

技术标签:

【中文标题】核心数据轻量级迁移属性重命名【英文标题】:Core Data Lightweight Migration Attribute Renaming 【发布时间】:2011-11-06 15:25:36 【问题描述】:

我知道 Stack Overflow 中有很多关于核心数据迁移的问题,但我找不到解决问题的方法。

通过将源模型中名为“LastName”的属性重命名为目标模型中的“Lastname”,我成功地进行了轻量级迁移。我一步一步地做到了这一点,它的工作原理是“姓氏”列上的所有先前数据现在都丢失了。新的重命名属性存在,我可以插入新实体并且新插入的实体的值是好的。问题存在于旧数据和旧属性上。正如苹果文档所说,我通过 XCode 接口或代码将目标模型上新重命名属性的 重命名标识符 放在源模型中旧属性的名称中,但没有任何效果。我关于重命名属性的数据总是丢失。

这是预期的还是错过了什么?

谢谢,

【问题讨论】:

【参考方案1】:

我最近遇到了同样的问题,即使使用重命名标识符,我的模型版本之间的数据也会丢失。该模型从版本 10 跳到了 15(版本 11 和 12 之间发生了变化),所以重命名标识符没有被拉出,即使我在以后的版本中包含它。我还遇到了如何处理以后对属性所做的任何更改的问题。

最后,在将持久存储连接到用于执行轻量级迁移的持久存储协调器:

NSEntityDescription *entity = [[[self managedObjectModel] entitiesByName] objectForKey:@"EntityName"];
NSPropertyDescription *property = [[entity attributesByName] objectForKey:@"NewAttributeName"];
[property setRenamingIdentifier:@"OldAttributeName"];

然后我在 *** (CoreData how to detect new version of an app so I can update the model?) 上使用了这个问题,该问题描述了如何将 CFBundleVersion 与持久存储一起存储。这样,如果您再次更新属性名称,您可以检查持久存储的当前版本并且您知道存储的最新版本,因此您可以即时选择正确的重命名标识符。

【讨论】:

以上是关于核心数据轻量级迁移属性重命名的主要内容,如果未能解决你的问题,请参考以下文章

核心数据迁移删除实体数据

加密核心数据迁移实体名称不匹配问题

轻量级核心数据迁移后崩溃

核心数据:仅添加或重命名一个属性时仍会发生迁移?

核心数据自动轻量级迁移在 ios5 上失败

核心数据轻量级迁移 Xcode 崩溃