4

Apple文档中所述

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

我想知道我们有哪些选择,以防我们需要处理 iCloud 功能和映射模型迁移......我知道我将来需要更改我的核心数据模型以向我的应用程序添加功能(而不仅仅是在轻量级方式)。问题是我现在不能说需要哪些新实体以及将设置与以前模型实体的哪些关系。

我正在考虑这样的序列:

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

2 - 让它与 iCloud 同步

如果 iCloud 包含适应新模型的事务日志文件,这将起作用。如果是旧事务日志文件(意味着适应旧模型),它将失败。

为了避免这种情况,我正在考虑这样做:

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

2 - 做我的核心数据模型的映射迁移

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

如果 iCloud 已经包含更新的事务日志文件(意味着适应新模型),这将不起作用。

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

谢谢。

4

1 回答 1

2

我不建议在生产应用程序中将 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];
于 2012-01-17T15:22:08.443 回答