是否可以使用 MagicalRecord 执行多个轻量级 CoreData 迁移?
Posted
技术标签:
【中文标题】是否可以使用 MagicalRecord 执行多个轻量级 CoreData 迁移?【英文标题】:Is it possible to perform multiple lightweight CoreData migrations with MagicalRecord? 【发布时间】:2013-07-08 12:53:41 【问题描述】:我有四个版本的 CoreData 模型。我刚刚添加了第四个小改动,一个实体中的一个新的可选属性。在版本 2 和 3 之间,我犯了一个错误,对现有模型进行了更改,而不是创建新版本。我恢复了第 2 版,添加了第 3 版并强制删除了商店,因此更新应用程序的用户正在重新生成商店而不执行迁移。
这很好,但现在我尝试使用 CoreData 和 MagicalRecord 执行轻量级迁移,从我的商店的版本 3 到 4,我总是收到 Can't find or automatically infer mapping model for migration
错误。我不想再次强制删除,但我不知道我还能做些什么来解决轻量级迁移。我开始怀疑问题仍然存在于版本 2 和 3 之间,但我无法确认。
我用来设置商店的代码非常简单:
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"Store.sqlite"];
【问题讨论】:
【参考方案1】:此错误消息通常表示您已删除或未在应用程序包中包含源模型或目标模型,因此核心数据无法为您构建映射模型。查看哪些实体受到影响的方法是将模型哈希打印到控制台并比较以查看哪些实体已更改。从那里您可以确定需要如何构建映射模型。还要记住,迁移不是顺序的。您有 4 个版本的模型,这意味着您现在有 4 x 3 x 2 迁移组合。核心数据只会做一个,从您的源存储所在的版本和最新版本开始。因此,您还需要测试从 v1 到 v4、v2 到 v4 等的迁移,以涵盖所有基础。
【讨论】:
我可以清楚地看到,我添加属性的实体的哈希值与我的模型的版本 3 到 4 不同。根据您的回答,对于这种情况,我似乎不能只依赖轻量级迁移,对吗?以上是关于是否可以使用 MagicalRecord 执行多个轻量级 CoreData 迁移?的主要内容,如果未能解决你的问题,请参考以下文章
MagicalRecord saveWithBlockAndWait
具有 MagicalRecord 的多个数据库或仅将部分数据库同步到 iCloud