iCloud核心数据模型模式迁移

时间:2015-01-06 05:36:24

标签: ios core-data migration icloud

根据Apple's Document,可以自动执行与iCloud相关的核心数据的轻量级迁移。 another documents from Apple说:

  

如果迁移配置了a的持久性存储   NSPersistentStoreUbiquitousContentNameKey选项到新模型   版本,商店的变化历史源于当前   设备也将被迁移,然后与任何其他设备合并   配置了新的模型版本。商店使用的任何变化   新版本也合并在其中。

     

但是,现有的更改不能   如果使用执行迁移,则迁移到新的模型版本   自定义映射模型。

我可以更改我的应用程序以使用iCloud,并且我可以成功地将(手动)本地数据库迁移到普遍存在的数据库中。因此,使用iCloud的第一个核心数据不会显示任何问题。

然而,当我添加新的模型版本时, 迁移的商店不包含任何内容。它应该包含使用旧版本模型创建的迁移内容。 the store’s history of changes因某种原因似乎被忽略了。

因此,安装新版本应用程序的测试人员会丢失使用早期版本创建的内容。没有日志或错误。

当我尝试使用相同的初始化过程来存储而没有NSPersistentStoreUbiquitousContentNameKey选项(本地存储)时,一切都很好。所有内容都会被新商店正确迁移和包含。

第二份文件说:

  

但是,现有的更改不能   如果使用执行迁移,则迁移到新的模型版本   自定义映射模型。

我认为我的需求可以与这种情况相匹配。 我也有自定义映射模型。 但我不知道要触发的地方。

我的商店选择非常典型,不那么特别:

{
    NSInferMappingModelAutomaticallyOption = 1;
    NSMigratePersistentStoresAutomaticallyOption = 1;
    NSPersistentStoreUbiquitousContentNameKey = "moment-cloud";
    NSPersistentStoreUbiquitousContentURLKey = Logs;
}

商店网址创建为:

NSURL* docURL = [fileManager URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask].firstObject;
return [docURL URLByAppendingPathComponent: kFileNameDatabaseForUbiquitous];

0 个答案:

没有答案