在非连续版本之间迁移时出现核心数据迁移错误

时间:2011-04-08 11:12:43

标签: cocoa core-data core-data-migration

问题

  • 我的核心数据模型有13个版本。
  • 我制作了13种地图模型(V1-V2,V2-V3等)
  • 我已启用自动迁移功能。
  • 在两个连续版本(例如V12-V13)之间迁移时,迁移工作正常
  • 在两个非连续版本(例如V11-V13)之间迁移时,迁移失败并显示错误:

    Can't find mapping model for migration

我尝试了什么

为每种可能的版本组合创建映射模型。这很有效,但这真的很麻烦。

对于版本14,我需要制作14种不同的映射模型。手动。啊。

代码

以下是我传入迁移的选项:

[persistentStoreCoordinator addPersistentStoreWithType:[self storeType]
                                          configuration:nil 
                                                    URL:url 
                                                options:[NSDictionary dictionaryWithObjectsAndKeys:
                                                         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                                                         [NSNumber numberWithBool:NO], NSReadOnlyPersistentStoreOption,
                                                         nil]
                                                  error:&error]){

数据模型

我的数据模型非常复杂,但现在是:http://dl.dropbox.com/u/136780/Engine_V2_DataModel.xcdatamodeld.zip

我现在没有在我的数据模型中使用任何版本哈希修饰符或重命名标识符。

1 个答案:

答案 0 :(得分:8)

请参阅此Stack Overflow问题:Core Data Migration Across Multiple Version Upgrades

基本上,要点是您不需要创建完整的映射模型集。您只需要在每对连续模型之间映射模型,然后您可以逐步将任何旧模型通过中间模型迁移到最新模型。

根据您的商店,性能可能不会很好,因为您不是一步完成迁移。但是,它可能已经足够好了,并且可能不值得创建完整的映射模型集。您还可以测试此方法的性能,以确定是否需要在模型的非连续版本之间创建映射。

Marcus Zarra(Core Data aficionado extraordinaire)的代码如下:http://media.pragprog.com/titles/mzcd/code/ProgressiveMigration/AppDelegate.m

(我刚要问这个问题,但多亏了LazyTwitter,Aaron Tuller指出了这个答案:https://twitter.com/tullera/status/57708304683642880