核心数据迁移有两种映射模型

时间:2012-10-02 08:01:03

标签: objective-c core-data migration

我希望你能帮到我。 我有三个型号版本V1,V2和V3(当前型号)。 因此我有两个映射模型V1to2 V2to3 我还启用了NSMigratePersistentStoresAutomaticallyOption。

当我使用V2商店启动应用程序时,它会成功迁移到V3。 但是,当我使用V1商店启动我的应用程序时,应用程序崩溃,因为找不到映射模型:

NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];

if (![psc addPersistentStoreWithType:NSSQLiteStoreType
            configuration:nil
                  URL:storeURL
                  options:optionsDictionary
                    error:&error]) {
    [NSexception raise:@"Open failed" format:@"Reason: %@", [error localizedDescription]];
}

我尝试将当前模型更改为V2并且工作正常,它从V1toV2成功迁移。 之后,我只是将当前模型更改回V3并再次对应用程序进行了操作,并从V2toV3成功迁移。

但是我错误的是,这次迁移首先不会自动运行V1toV2,之后会自动通过V2toV3运行?

非常感谢你的期待。 FLO

1 个答案:

答案 0 :(得分:0)

您需要创建从V1到V3的第三个映射模型。核心数据不会逐步完成增量映射模型。它的工作方式是Core Data分析数据文件(V1)中的模型和项目中的当前模型(V3),然后尝试查找从前者到后者的映射模型。因此,当您添加V4时,您需要创建从V1到V4,V2到V4以及V3到V4的映射模型。

如果从V1到V3的更改使得单个映射模型无法正常工作,那么在将生成的V2数据文件输入自动迁移之前,您需要以编程方式手动将文件从V1转换为V2。

启用核心数据迁移调试可以帮助您了解正在发生的事情。查看this post了解详情。