我打算发布一个CoreData应用程序,但我不确定是否引入了iCloud功能。这个问题是在我在iPhone上对我的应用程序进行beta测试之后,用相关数据填充它。 然后我添加了iCloud功能并开始在iPad上进行测试。我发现只有新的条目才能在设备之间同步,这就是我所做的尝试:
但是我遇到了一些奇怪的问题,例如附加到错误父母的子实体。然后我试了一下。
在这种情况下,两台设备上的数据相同,但我仍然无法同步旧数据,而新数据在几秒钟后的大部分时间内完全同步。
我知道CoreData同步发生在事务日志交换中,因此很明显旧数据不会同步。但是在这一点上,我问的是否有人已经遇到过这个问题,这对我来说似乎很常见,或者如果我遗漏某些东西,某些设置或代码行使这个工作按预期工作。
答案 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命中系统。