出货后在核心数据应用程序中引入iCloud,如何迁移旧数据

时间:2012-03-04 10:05:23

标签: objective-c core-data icloud

我打算发布一个CoreData应用程序,但我不确定是否引入了iCloud功能。这个问题是在我在iPhone上对我的应用程序进行beta测试之后,用相关数据填充它。 然后我添加了iCloud功能并开始在iPad上进行测试。我发现只有新的条目才能在设备之间同步,这就是我所做的尝试:

  • 使用iPhone,填充数据,启用iCloud,开始处理空iPad

但是我遇到了一些奇怪的问题,例如附加到错误父母的子实体。然后我试了一下。

  • 从iPhone导出申请文件并在iPad中导入

在这种情况下,两台设备上的数据相同,但我仍然无法同步旧数据,而新数据在几秒钟后的大部分时间内完全同步。

我知道CoreData同步发生在事务日志交换中,因此很明显旧数据不会同步。但是在这一点上,我问的是否有人已经遇到过这个问题,这对我来说似乎很常见,或者如果我遗漏某些东西,某些设置或代码行使这个工作按预期工作。

1 个答案:

答案 0 :(得分:5)

我认为你没有错过任何东西。基本问题是iCloud不支持预先存储的数据库。这也让我感到不安。 来自doc的

https://developer.apple.com/library/ios/#releasenotes/DataManagement/RN-iCloudCoreData/_index.html

  

您不应该使用预先打包的数据库文件来播种初始内容。   相反,您应该在代码中创建默认项目,或使用   NSPersistentStoreCoordinator的   migratePersistentStore:toURL:options:withType:error:要迁移的方法   预先打包的数据库到所需的位置。

我还没有尝试过使用migratePersistentStore:...方法,但关键的事实似乎是通过事务日志在iCloud上传输核心数据依赖于每个从机制跟踪数据库诞生的事务。

我认为使用migratePersistentStore:...会导致大量的事务blob命中系统。