iCloud,核心数据,迁移和模型映射

时间:2011-10-20 14:36:21

标签: ios core-data core-data-migration icloud

正如Apple documentation

所述
  

不支持使用映射模型进行架构迁移(轻量级   支持迁移。)

我想知道我们需要处理iCloud功能和映射模型迁移时的选项......我知道将来需要更改我的Core Data模型才能为我的应用程序添加功能(而不是只是以轻量级的方式)。问题是我现在不能说需要哪些新实体以及将与之前的模型实体建立哪种关系。

我在考虑这样的序列:

  

1 - 启动我的应用程序进行核心数据模型的映射迁移

     

2 - 让它与iCloud同步

如果iCloud包含适用于新模型的事务日志文件,这将有效。如果是旧的事务日志文件(适用于旧模型的方法),它将失败。

为了避免我在考虑这样做:

  

1 - 启动我的应用程序,让它与iCloud同步

     

2 - 执行核心数据模型的映射迁移

     

3 - 删除旧的iCloud数据,用新的更新

如果iCloud已包含更新的事务日志文件(适用于新模型的方式),则无效。

我需要的是一种检查iCloud中的事务日志是否与我当前的核心数据模型兼容的方法。有没有办法做到这一点?

感谢。

1 个答案:

答案 0 :(得分:2)

我不建议在生产应用中使用Core Data和iCloud。

它不够稳定。没有简单的方法可以检查iCloud设置中是否启用了应用程序。更不用说如果用户在启用它后关闭iCloud支持,可能会出现问题。

迁移是另一个问题。轻量级迁移工作得相当好。但是为了使映射模型迁移工作,您需要从现有的iCloud" ubiquity文件夹"中清除/逐出内容,创建一个新的(使用新名称)并更改与NSPersistentStoreUbiquitousContentURLKey相关的值。而且,您需要确保所有客户端都这样做。它复杂但可行。不确定它是否值得...

关于版本兼容性问题,我还没有尝试过,但一个想法是以某种方式从iCloud事务日志和" compatibleWithStoreMetadata"获取商店元数据。 ManagedObjectModel上的方法检查版本是否匹配:

// Get current model
NSManagedObjectModel *myModel = [self managedObjectModel];

// Check compatibility
BOOL isCompatible = [myModel isConfiguration:nil compatibleWithStoreMetadata: metadataFromTransactionLogEntry];