【问题标题】:Migrating through several versions in core data在核心数据中迁移多个版本
【发布时间】:2010-11-29 23:37:36
【问题描述】:

我有 Core Data 应用程序,并且一直在迁移(升级)核心数据模型。每次我创建一个新版本时,我都会为每个版本创建一个映射模型。 现在我有 16 个版本,我有这样的映射模型: 1to2.xcmapingmodel 2to3.xcmapingmodel 3to4.xcmapingmodel ...ETC。最多 16 个

这工作正常,但是当一个用户拥有版本 10 的数据文件并更新版本 16 的应用程序时会出现问题。我认为 Core Data 会自动从 10 升级到 16,但显示错误说“缺少映射模型”。为了确保映射模型正确,我将它一个一个升级到每个版本(10 到 11、11 到 12 等),它确实有效...... 这是我的代码。

我用这个代码指定模型版本:

NSBundle *modelWrapper = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"TaskApp_DataModel" ofType:@"momd"]];
NSString *modelPath = [modelWrapper pathForResource:@"TaskApp_DataModel 16" ofType:@"mom"];
NSLog(@"%@",modelPath);
managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];

我在这里定义了自动迁移选项:

  NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata-sql"]];


NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];



if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                                            configuration:nil 
                                            URL:url 
                                            options:dict 
                                            error:&error]){

有人知道如何升级吗? 谢谢。

【问题讨论】:

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


    【解决方案1】:

    它只会尝试从用户现有版本(可能是 v1)到当前版本。如果您有 3 个版本,那么您需要 v1-v2、v2-v3、v1-v3 的地图。 16个版本都发货了吗? 如果是这样,您可能需要开始制作新的迁移地图,如果您以前没有尝试过启用自动迁移,也可能值得启用,因为它可以很好地填补空白。我认为是:

    [dict setObject:[NSNumber numberWithBool:YES] forKey:NSInfersMappingModel];

    但您必须仔细检查。

    很抱歉成为坏消息的带来者

    【讨论】:

    • 是的,谢谢...我刚刚在 Marcus Zarra Core Data 书中找到了它...他编写了一个大程序来从每个模型迁移到下一个模型,而无需编写额外的映射模型。去检查 NSINfersMappingModel 谢谢!
    • 尝试将数据迁移保持在最低限度(即主要版本),因为开销很快就会膨胀(每次更改将模型从每个版本映射到当前版本。)另外,请注意使用自动迁移可以从一个版本工作到下一个版本,但是您的模型可以更改足够多,以至于从版本 16 到 21 的差异如此之大,以至于无法计算差异。很高兴你把它整理好了!
    • @theReverend,我正在考虑尝试强制执行您在第一条评论中提到的顺序迁移策略。 Marcus Zarra 书中的例子怎么样?
    猜你喜欢
    • 2010-12-06
    • 2021-08-11
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2011-09-23
    相关资源
    最近更新 更多