Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios iCloud、核心数据、迁移和模型映射_Ios_Core Data_Core Data Migration_Icloud - Fatal编程技术网

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

Ios iCloud、核心数据、迁移和模型映射,ios,core-data,core-data-migration,icloud,Ios,Core Data,Core Data Migration,Icloud,正如在报告中所说的那样 不支持使用映射模型进行架构迁移(轻量级) 支持迁移) 我想知道,如果我们需要处理iCloud功能性和映射模型迁移,我们有哪些选择。。。我知道我将来需要更改我的核心数据模型,以便为我的应用程序添加功能(而不仅仅是以轻量级的方式)。问题是,我现在不能说将需要哪些新实体,以及将设置哪些与以前的模型实体的关系 我在想这样一个序列: 1-启动我的应用程序,对我的核心数据模型进行映射迁移 2-让它与iCloud同步 如果iCloud包含适用于新模型的事务日志文件,这将起作用。如果是旧

正如在报告中所说的那样

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

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

我在想这样一个序列:

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

2-让它与iCloud同步

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

为了避免发生这种情况,我正在考虑:

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

2-对我的核心数据模型进行映射迁移

3-删除旧iCloud数据并用新数据更新

如果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与核心数据结合使用。