【问题标题】:Fast local update of CoreData+CloudKit with public database changes使用公共数据库更改快速本地更新 CoreData+CloudKit
【发布时间】:2021-03-12 06:03:57
【问题描述】:

我的应用使用 CoreData+Cloudkit 和公共数据库。
默认情况下,iCloud 与公共数据库的同步仅在启动时完成,然后每半小时完成一次。
由于我的应用程序需要更快的同步,所有用户都登录到 iCloud,并订阅了 iCloud 更改。因此,一个用户的 iCloud 修改会向所有其他用户发送通知。这行得通。

问题:

通知现在应该触发本地持久存储的更新,即 iCloud 插入或更新应该下载相应的 iCloud 记录,并将其插入或更新到持久存储中(不会发生删除)。

可能的解决方案:

  1. 我可以手动从 iCloud 下载记录,然后在托管上下文中插入或更新它。但是,插入将被视为新记录,并稍后作为副本上传到 iCloud。每个收到通知的用户都会有一个副本。虽然可以处理这样的欺骗(只有少数用户),但这并不是那么优雅。

  2. 更好的是触发重新镜像,因为无论如何都会在启动期间和每半小时完成一次。但我没有找到任何合理的方法来做到这一点。我找到了one suggestion to toggle iCloud sync off and on(应该触发同步),但这给了我一个客户端错误(重新注册镜像代理)。我找到了another suggestion to swap the persistent stores(一个有 iCloud 镜像,一个没有),但在我看来,这对我的问题来说是一个可怕的黑客攻击。

我的问题:

使用 iCloud 更改更新本地存储的合理方法是什么?

【问题讨论】:

  • 您在此期间有没有找到任何解决方案?我有同样的问题。
  • 很遗憾没有。目前我正在使用解决方案 1。我希望 Apple 将触发同步的功能(因为它显然存在)提供给公共 API。

标签: core-data cloudkit nspersistentcloudkitcontainer


【解决方案1】:

目前,ck 公共数据库仅在启动时或大约 20 分钟后复制

【讨论】:

  • 其实这是评论,不是答案。此外,我在问题的开头就写了这个。我正在寻找解决方案!
  • 迁移到Cloud Firestore 完美集成到IOS,完美实时集成。
猜你喜欢
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2019-04-20
  • 1970-01-01
  • 2021-09-21
相关资源
最近更新 更多