首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将旧数据与NSPersistentCloudKitContainer同步

将旧数据与NSPersistentCloudKitContainer同步
EN

Stack Overflow用户
提问于 2019-07-03 18:10:27
回答 1查看 933关注 0票数 8

我使用NSPersistentCloudKitContainer将不同设备之间的数据与CloudKit同步。它对一个新项目非常好,但是当我在旧项目中使用它时,用NSPersistentContainer添加的旧数据并不同步。

我想要实现的是同步在将旧数据更改为NSPersistentContainer后添加到NSPersistentCloudKitContainer的旧数据。有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 06:20:58

我找到了一种适用于我的核心数据数据库的解决方案--我的解决方案非常复杂,有多重到多个关系(一个名为Somnus的手术/麻醉日志应用程序)。

首先,我为我的所有核心数据实体创建了一个名为sentToCloud的新属性,并在核心数据模型中默认将其设置为FALSE

对于现有用户的第一个加载:

  • 使用谓词"sentToCloud == FALSE"获取每种实体类型的请求
  • 将每个对象的sentToCloud更改为TRUE,然后保存
  • 这将触发NSPersistentCloudKitContainer启动同步。

我这样做是按照对我的数据库起作用的“优先级”的顺序,假设iCloud同步会话与修改Core的顺序相匹配。在我的测试中,情况似乎是这样:

  • 我首先同步所有子实体(或大多数类似子实体)。
  • 然后同步他们的父母,等等,在树上。
  • 我最后一次同步用户与对象的交互,一旦其他一切就绪,关系就完好无损,当我们等待NSPersistentCloudKitContainer重新连接所有关系时,他们不认为他们的数据是边界的。
  • 我还将任何二进制数据(在后台神奇地变成了CKAsset )都要保留下来,因为它不是我数据库中最重要的部分。

我的数据库成功地从我的iPad同步到iPhone,所有的关系和二进制数据看起来都是正确的。

现在,我所需要的就是告诉用户数据何时同步(和/或某种进度),并让他们完全关闭它。

增编

因此,在重新设置了iCloud仪表板上的所有数据并删除了我的iPhone & iPad上的应用程序之后,我再次尝试了这一点。

第二次只同步了一些数据。看起来,它在处理大型同步请求(控制台中有大量.limitExceeded CKErrors )时仍然存在问题。

令人沮丧的是,现在还不清楚它是否会中断再次尝试的请求--我不认为是这样。我已经把它放在了一夜之间,没有进一步同步,只有更多的.limitExceeded CKErrors。

也许这就是他们不想同步现有数据的原因?

就我个人而言,我认为这是愚蠢的。有时,用户会对他们的数据进行批处理,这将涉及在一个操作中更新数千个核心数据对象。如果这只会被.limitExceeded CKErrors所困扰,那么NSPersistentCloudKitContainer将不是一个很好的同步解决方案。

他们需要一种更好的方法来处理这些错误(将请求分解成更小的请求),以及查看正在发生的事情的能力(可能还会向用户提供一些UI )。

我真的需要这样做,因为就目前情况而言,没有办法使用CloudKit来同步多到多个核心数据关系。

我只希望他们还在改进这门课。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56875823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档