Jor*_*416 6 notifications subscriptions ios icloud cloudkit
我正在构建一个非常依赖CloudKit作为数据源的iOS应用程序.
安装应用程序并首次运行后,我需要下载大量驻留在CloudKit Container公共数据库中的数据.我这样做了CKFetchNotificationChangesOperation
每次启动应用程序时,此操作都会运行,以检查自上次收到的服务器更改令牌以来的数据更改.显然,在第一次启动应用程序时,我必须提供的更改令牌为nil,这将导致CKFetchNotificationChangesOperation加载数据库上发生的所有更改.
然后返回的数据将存储在本地,因为我希望拥有与我的用户相关的所有数据的本地缓存.我将这些数据存储在核心数据库中.由于第一次启动时应用程序需要的数据集可能很大,我真的需要CKFetchNotificationChangesOperation来获取服务器上的所有更改.
然而,这似乎不可靠.使用我在数据库中输入的一些数据测试此服务时,我没有收到我应该收到的所有数据.当我在公共数据库中输入更多数据时,CKFetchNotificationChangesOperation似乎完全忽略了我之前输入的记录.有时候,有些人会漏掉但是非常不可靠.
显然,我已经验证我的订阅是合法的(之前加载了相同的记录),并且我检查了moreComing参数是否CKFetchNotificationChangesOperation为真(总是如此false)
题
在初始加载时,如何在公共数据库中获取所有数据?我认为CKFetchNotificationChangesOperation应该做的工作,但似乎不可靠.是否有类似"范围"的东西我可以在此操作上配置以强制它加载我的所有数据?或者CKFetchNotificationChangesOperation不适合初始加载,我应该通过自定义操作加载我需要的所有数据吗?
根据我对通知消息的发现,问题似乎可能源于两种可能性中的一种,也可能是两种:
\n\n这两种情况都可以使用记录及其元数据的本地存储(数组或字典)来解决。如Apple 文档维护 CloudKit 的本地缓存中所述。
\n\n拥有本地存储的记录将允许您填充初始数据集,并对更改进行任何更新,同时等待通过 CloudKit 完成的任何异步延迟。
\n\n拥有已见过的每一个新事物 的本地数组。notificationID正如此StackQuestion问答中所述,readNotifications 似乎是反复出现的问题。将通知标记为已读可防止该通知在将来的提取中返回,但在更新 CloudKit 数据库之前它们可能会导致问题。
~~~~~~~~~~~~~~~~~~~~~~~~~ 链接解决方案~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
\n\n这是一个 Stack Overflow 问答,其中包含用于解决类似问题的代码,但不包含有关其工作方式/原因的详细信息。因此,请查看之前链接的问答之一,如果需要,它会提供更多详细信息。
\n\n如果您有任何疑问和/或需要任何澄清,请告诉我。
\n\n\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2 \x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80 \xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 \xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2 \x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80 \xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 \xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2 \x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80 \xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 \xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2 \x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80 \xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 \xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2\xe2 \x80\xa2\xe2\x80\xa2\xe2\x80\xa2
\n\n\xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 WWDC CloudKit 最佳实践 (视频中 12:45 左右开始)
\n