正如
Apple documentation所述
Schema migration using mapping models is not supported (lightweight
migration is supported).
我想知道我们需要处理iCloud功能和映射模型迁移的选项……我知道将来我需要更改我的Core Data模型,以便为我的应用程序添加功能(而不仅仅是轻量级方式).问题是我现在不能说需要哪些新实体以及将与之前的模型实体建立哪些关系.
我在考虑这样的序列:
1 – Launching my app doing the mapping migration of my Core Data Model
2 – Letting it synchronized with iCloud
如果iCloud包含适用于新模型的事务日志文件,这将起作用.对于旧的事务日志文件(适用于旧模型的方式),它将失败.
为了避免这种情况,我正在考虑做:
1 – Launching my app letting it synchronized with iCloud
2 – Doing the mapping migration of my Core Data Model
3 – Removing old iCloud data updating it with the new one
如果iCloud已包含更新的事务日志文件(适用于新模型的方法),则无效.
我需要的是一种检查iCloud中的事务日志是否与我当前的核心数据模型兼容的方法.有没有办法做到这一点 ?
谢谢.
最佳答案 我不建议在生产应用程序中使用Core Data和iCloud.
它不够稳定.没有简单的方法可以检查iCloud设置中是否启用了应用程序.更不用说如果用户在启用后关闭iCloud支持,可能会出现的问题.
迁移是另一个问题.轻量级迁移工作得相当好.但是为了使映射模型迁移工作,您需要从现有的iCloud“ubiquity文件夹”中清除/逐出内容,创建一个新的(使用新名称)并更改与NSPersistentStoreUbiquitousContentURLKey相关联的值.而且,您需要确保所有客户端都这样做.它复杂但可行.不确定它是否值得…
关于版本兼容性问题,我还没有尝试过,但是想法是以某种方式从iCloud事务日志获取商店元数据并通过ManagedObjectModel上的“compatibleWithStoreMetadata”方法检查版本是否匹配:
// Get current model
NSManagedObjectModel *myModel = [self managedObjectModel];
// Check compatibility
BOOL isCompatible = [myModel isConfiguration:nil compatibleWithStoreMetadata: metadataFromTransactionLogEntry];