Core data 具有多个版本的核心数据迁移(轻量级)

Core data 具有多个版本的核心数据迁移(轻量级),core-data,migration,Core Data,Migration,我使用ABC.xcdatamodel开发了核心数据存储。 发布了应用程序版本1 需要对属性名称进行一些简单的更改,因此我创建了一个新版本ABC 2.vcdatamodel。 发布了应用程序版本2。 效果很好。移民是完美的 然后,我需要做一些更简单的更改(添加了一个属性),所以我在ABC 2的基础上创建了另一个新版本;ABC 3.xcdatamodel。 从版本2更新时自动迁移失败 然而,如果我尝试从版本1(使用ABC.xcdatamodel)升级,一切都会很顺利 我错过了什么明显的东西吗?想法?

我使用ABC.xcdatamodel开发了核心数据存储。 发布了应用程序版本1

需要对属性名称进行一些简单的更改,因此我创建了一个新版本ABC 2.vcdatamodel。 发布了应用程序版本2。 效果很好。移民是完美的

然后,我需要做一些更简单的更改(添加了一个属性),所以我在ABC 2的基础上创建了另一个新版本;ABC 3.xcdatamodel。 从版本2更新时自动迁移失败

然而,如果我尝试从版本1(使用ABC.xcdatamodel)升级,一切都会很顺利


我错过了什么明显的东西吗?想法?

一个想法-您可能无意中修改了版本2数据模型,使其与修改前创建的版本2存储不再匹配。现在,当加载具有“真实”版本2存储的实例时,无法找到匹配的数据模型,因此无法将其从2转换为3。在使用版本3之前,您是否将版本2模型签入git/svn?它是否显示为已修改


请注意,“修改”并不一定意味着添加任何属性——只是任何会改变核心数据用于定义版本的哈希值的小事情。

没错!我发现我错误地将一个关系从“建议”重命名为“建议”。通过将散列值输出到控制台发现了这一点。添加了名称映射,并按预期工作。Thanx.我自己也一直在努力解决核心数据迁移问题,这一问题已经困扰了我好几次了。关于你的技巧,请看这篇关于启用核心数据迁移调试的文章。我刚刚使用了它,它对准确识别哪些散列不匹配非常有帮助。我在选定的答案中添加了一个指向相关苹果技术说明的链接: