iCloud核心数据模型模式迁移
根据苹果的文档 ,可以自动执行与iCloud连接的核心数据的轻量级迁移。 而另一份来自苹果的文件则表示:
如果将使用NSPersistentStoreUbiquitousContentNameKey选项configuration的持久存储迁移到新的模型版本,则商店的源自当前设备的更改历史logging也将被迁移,然后与使用新模型版本configuration的任何其他设备合并。 来自使用新版本的商店的任何更改也将合并到。
但是,如果使用自定义映射模型执行迁移,则不能将现有更改迁移到新模型版本。
我可以改变我的应用程序使用iCloud,我可以成功地将(手动)本地数据库迁移到无处不在。 所以,第一个与iCloud的核心数据并没有显示任何问题。
但是,当我添加新的模型版本时,迁移的商店不包含任何内容。 它应该包含使用旧版本模型创build的迁移内容。 the store's history of changes
似乎由于某种原因而被忽略。
因此,安装新版本应用程序的testing人员会丢失使用早期版本创build的内容。 没有日志或错误。
当我尝试相同的初始化过程来存储没有NSPersistentStoreUbiquitousContentNameKey
选项(本地存储),一切都很好。 所有内容都被正确迁移并被新商店包含。
第二个文件说:
但是,如果使用自定义映射模型执行迁移,则不能将现有更改迁移到新模型版本。
我认为我的需求可以匹配这种情况。 我也有自定义的映射模型。 但我不知道触发的地方。
我的商店select是非常典型的,不是那么特别:
{ NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; NSPersistentStoreUbiquitousContentNameKey = "moment-cloud"; NSPersistentStoreUbiquitousContentURLKey = Logs; }
商店url创build为:
NSURL* docURL = [fileManager URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask].firstObject; return [docURL URLByAppendingPathComponent: kFileNameDatabaseForUbiquitous];