iOS:CKFetchNotificationChangesOperation 结果不完整

标签 ios notifications icloud cloudkit subscriptions

我正在构建一个严重依赖 CloudKit 作为数据源的 iOS 应用。

安装应用程序并首次运行后,我需要下载大量驻留在 CloudKit 容器的公共(public)数据库中的数据。我使用 CKFetchNotificationChangesOperation

执行此操作

此操作会在我每次启动应用程序时运行,以检查自上次收到服务器更改 token 以来的数据更改。显然,在应用程序首次启动时,我必须提供的更改 token 为 nil,这将导致 CKFetchNotificationChangesOperation 加载数据库中曾经发生的所有更改。

然后返回的数据将存储在本地,因为我希望在本地缓存所有与我的用户相关的数据。我将此数据存储在核心数据数据库中。由于应用程序首次启动时需要的数据集可能很大,我真的需要 CKFetchNotificationChangesOperation 来获取服务器上的所有更改。\

然而,这似乎不可靠。当使用我在数据库中输入的一些数据测试此服务时,我没有收到我应该收到的所有数据。 当我在公共(public)数据库中输入更多数据时,CKFetchNotificationChangesOperation 似乎完全忽略了我之前输入的记录。有时,有些会漏掉,但这是非常不可靠的。

显然,我已经验证了我的订阅是合法的(之前加载了相同的记录),并且我已经检查了 CKFetchNotificationChangesOperationmoreComing 参数是否为真(它始终为 false)

问题

我应该怎么做才能在初始加载时获取公共(public)数据库中的所有数据?我认为 CKFetchNotificationChangesOperation 应该可以完成这项工作,但它似乎不可靠。我可以在此操作上配置类似“范围”的东西以强制它加载我的所有数据吗?或者 CKFetchNotificationChangesOperation 不适合初始加载,我是否应该通过自定义操作加载我需要的所有数据?

最佳答案

根据我发现的有关通知消息的内容,问题似乎可能源于两种可能性中的一种,也可能两种:

  • 正在存储记录asynchronously ,在填充本地数据集时提供意外延迟。
  • 阅读通知混淆了所需的查询/订阅结果。

这两种情况都可以使用记录及其元数据的本地存储(数组或字典)来修复。如 Maintaining a Local Cache of CloudKit 中所述Apple 的文档。

情况一:

拥有本地存储的记录将允许您填充初始数据集,并对更改进行任何更新,同时等待通过 CloudKit 完成的任何异步延迟。

情况二:

拥有一个本地数组,其中包含已看到的每个 NEW notificationID。如本 StackQuestion 中所述问答,readNotifications 似乎是反复出现的问题。将通知标记为已读可防止通知在未来的提取中返回,但在更新 CloudKit 数据库之前它们可能会导致问题。

~~~~~~~~~~~~~~~~~~~~~~~~~ 链接解决~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

THIS是一个 Stack Overflow 问题和答案,其中包括用于解决类似问题的代码,但它不包含有关其工作方式/原因的详细信息。所以,结帐 this ,之前链接的问答之一,如果需要,它会更详细一些。

如果您有任何问题和/或需要任何说明,请告诉我。

•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ••••••••••••••

••• WWDC CloudKit Best Practices (从 12:45 左右开始进入视频)

关于iOS:CKFetchNotificationChangesOperation 结果不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45981860/

相关文章:

iphone - iOS 5.1 不备份标志吗?

ios - iCloud UIDocumentPicker 间歇性崩溃并挂起

iphone - 在 iCloud 同步设备上测试 iOS Ad-hoc IPA

ios - 如何使用 iOS 图表在 LineChart 上设置不同的颜色间隔?

ios - swift UIActivityViewController

c# - 如何从 DLL 设置委托(delegate)/回调(C 和 C# 之间的互操作)

swift - WatchKit 上的延迟警报?

android - 如何在 Android 手机上创建动画电子邮件/短信通知?

到达位置时iOS本地通知

iphone - 将 NSManagedObject 转换为子类对象