【发布时间】:2021-03-12 06:03:57
【问题描述】:
我的应用使用 CoreData+Cloudkit 和公共数据库。
默认情况下,iCloud 与公共数据库的同步仅在启动时完成,然后每半小时完成一次。
由于我的应用程序需要更快的同步,所有用户都登录到 iCloud,并订阅了 iCloud 更改。因此,一个用户的 iCloud 修改会向所有其他用户发送通知。这行得通。
问题:
通知现在应该触发本地持久存储的更新,即 iCloud 插入或更新应该下载相应的 iCloud 记录,并将其插入或更新到持久存储中(不会发生删除)。
可能的解决方案:
-
我可以手动从 iCloud 下载记录,然后在托管上下文中插入或更新它。但是,插入将被视为新记录,并稍后作为副本上传到 iCloud。每个收到通知的用户都会有一个副本。虽然可以处理这样的欺骗(只有少数用户),但这并不是那么优雅。
-
更好的是触发重新镜像,因为无论如何都会在启动期间和每半小时完成一次。但我没有找到任何合理的方法来做到这一点。我找到了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