根据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];