gpt4 book ai didi

iOS:CKFetchNotificationChangesOperation 结果不完整

转载 作者:可可西里 更新时间:2023-11-01 03:56:33 26 4
gpt4 key购买 nike

我正在构建一个严重依赖 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com