Ios iCloud、核心数据、迁移和模型映射
正如在报告中所说的那样 不支持使用映射模型进行架构迁移(轻量级) 支持迁移) 我想知道,如果我们需要处理iCloud功能性和映射模型迁移,我们有哪些选择。。。我知道我将来需要更改我的核心数据模型,以便为我的应用程序添加功能(而不仅仅是以轻量级的方式)。问题是,我现在不能说将需要哪些新实体,以及将设置哪些与以前的模型实体的关系 我在想这样一个序列: 1-启动我的应用程序,对我的核心数据模型进行映射迁移 2-让它与iCloud同步 如果iCloud包含适用于新模型的事务日志文件,这将起作用。如果是旧的事务日志文件(即适应旧模型的方式),它将失败 为了避免发生这种情况,我正在考虑: 1-启动我的应用程序,让它与iCloud同步 2-对我的核心数据模型进行映射迁移 3-删除旧iCloud数据并用新数据更新 如果iCloud已经包含更新的事务日志文件(即适应新模型的方式),则此操作将不起作用 我需要的是一种检查iCloud中的事务日志是否与我当前的核心数据模型兼容的方法。有办法做到这一点吗Ios iCloud、核心数据、迁移和模型映射,ios,core-data,core-data-migration,icloud,Ios,Core Data,Core Data Migration,Icloud,正如在报告中所说的那样 不支持使用映射模型进行架构迁移(轻量级) 支持迁移) 我想知道,如果我们需要处理iCloud功能性和映射模型迁移,我们有哪些选择。。。我知道我将来需要更改我的核心数据模型,以便为我的应用程序添加功能(而不仅仅是以轻量级的方式)。问题是,我现在不能说将需要哪些新实体,以及将设置哪些与以前的模型实体的关系 我在想这样一个序列: 1-启动我的应用程序,对我的核心数据模型进行映射迁移 2-让它与iCloud同步 如果iCloud包含适用于新模型的事务日志文件,这将起作用。如果是旧
谢谢。我不建议在生产应用程序中使用iCloud的核心数据 它不够稳定。没有简单的方法可以在iCloud设置中检查应用程序是否已打开/禁用。更不用说如果用户在启用iCloud支持后关闭iCloud支持可能会出现的问题 迁移是另一个问题。轻量级迁移工作得相当好。但为了使映射模型迁移工作正常,您需要从现有的iCloud“ubiquity文件夹”中清除/逐出内容,创建一个新文件夹(使用新名称),并更改与NSPersistentStoreUbiquityousContentUrlKey关联的值。而且,您需要确保所有客户都这样做。这很复杂,但可行。不知道它是否值得 关于版本兼容性问题,我还没有尝试过,但我的想法是通过某种方式从iCloud事务日志获取存储元数据,并通过ManagedObjectModel上的“compatibleWithStoreMetadata”方法检查版本是否匹配:
// Get current model
NSManagedObjectModel *myModel = [self managedObjectModel];
// Check compatibility
BOOL isCompatible = [myModel isConfiguration:nil compatibleWithStoreMetadata: metadataFromTransactionLogEntry];
似乎可以使用iCloud键值来存储模型版本,您可以在创建持久存储协调器或进行模型映射之前检查该版本。我现在希望苹果iCloud论坛上提供的iPhoneRecipes示例表明iCloud和核心数据的使用仍然不稳定。同步并不总是成功,有时与iCloud的连接会失败。我想在苹果更新之前,我不会将iCloud与核心数据结合使用。