Woj*_*tek 5 core-data ios swift cloudkit nspersistentcloudkitcontainer
我正在使用NSPersistentCloudKitContainerCloudKit在不同设备之间同步数据。它与新项目完美配合,但是当我将其与旧项目一起使用时,添加的旧数据NSPersistentContainer无法同步。
我要实现的是同步将添加到的旧数据NSPersistentContainer更改为NSPersistentCloudKitContainer。可能吗?
我找到了一个适用于我的核心数据数据库的解决方案 - 而我的数据库非常复杂,具有多个多对多关系(一个名为 Somnus 的手术/麻醉日志应用程序)
我首先为所有称为的核心数据实体创建一个新属性sentToCloud,并将其设置FALSE为核心数据模型中的默认值。
现有用户首次加载时:
"sentToCloud == FALSE"使用每个实体类型的谓词获取请求sentToCloud为TRUE每个对象然后保存 MOCNSPersistentCloudKitContainer触发开始同步我按照适用于我的数据库的“优先级”顺序完成了此操作,假设 iCloud 同步会话与核心数据的修改顺序匹配。在我的测试中似乎是这样的:
NSPersistentCloudKitContainer重新连接所有关系时,他们不会认为他们的数据被破坏了CKAsset幕后数据),因为它不是我的数据库中最重要的部分我的数据库已成功从 iPad 同步到 iPhone,并且所有关系和二进制数据都显示正确。
现在我需要的是一种方法来告诉用户数据何时同步(和/或某种进度)并让他们完全关闭它。
附录
因此,在重置 iCloud 仪表板上的所有数据并删除 iPhone 和 iPad 上的应用程序后,我再次尝试了此操作。
第二次只同步了一些数据。看起来它在处理大型同步请求时仍然存在问题(.limitExceeded控制台中有很多 CKError)。
令人沮丧的是,目前尚不清楚它是否会破坏重试的请求 - 我认为不会。我已经把它留了一夜,仍然没有进一步同步,只有更多的.limitExceededCKErrors。
也许这就是他们不想同步现有数据的原因?
就我个人而言,我认为这是愚蠢的。有时,用户会对数据进行批处理,这将涉及在一个操作中更新数千个核心数据对象。.limitExceeded如果这只是因为CKErrors而陷入困境,NSPersistentCloudKitContainer那么这将不是一个很好的同步解决方案。
他们需要一种更好的方法来处理这些错误(将请求分解为更小的请求),并且能够查看正在发生的情况(并且可能向用户呈现一些 UI)。
我确实需要它才能工作,因为就目前情况而言,无法使用 CloudKit 同步多对多核心数据关系。
我只是希望他们仍然致力于这个课程并改进它。
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |