- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在构建一个严重依赖 CloudKit 作为数据源的 iOS 应用。
安装应用程序并首次运行后,我需要下载大量驻留在 CloudKit 容器的公共(public)数据库中的数据。我使用 CKFetchNotificationChangesOperation
此操作会在我每次启动应用程序时运行,以检查自上次收到服务器更改 token 以来的数据更改。显然,在应用程序首次启动时,我必须提供的更改 token 为 nil,这将导致 CKFetchNotificationChangesOperation
加载数据库中曾经发生的所有更改。
然后返回的数据将存储在本地,因为我希望在本地缓存所有与我的用户相关的数据。我将此数据存储在核心数据数据库中。由于应用程序首次启动时需要的数据集可能很大,我真的需要 CKFetchNotificationChangesOperation 来获取服务器上的所有更改。\
然而,这似乎不可靠。当使用我在数据库中输入的一些数据测试此服务时,我没有收到我应该收到的所有数据。当我在公共(public)数据库中输入更多数据时,CKFetchNotificationChangesOperation
似乎完全忽略了我之前输入的记录。有时,有些会漏掉,但这是非常不可靠的。
显然,我已经验证了我的订阅是合法的(之前加载了相同的记录),并且我已经检查了 CKFetchNotificationChangesOperation
的 moreComing
参数是否为真(它始终为 false
)
问题
我应该怎么做才能在初始加载时获取公共(public)数据库中的所有数据?我认为 CKFetchNotificationChangesOperation
应该可以完成这项工作,但它似乎不可靠。我可以在此操作上配置类似“范围”的东西以强制它加载我的所有数据吗?或者 CKFetchNotificationChangesOperation
不适合初始加载,我是否应该通过自定义操作加载我需要的所有数据?
最佳答案
根据我发现的有关通知消息的内容,问题似乎可能源于两种可能性中的一种,也可能两种:
这两种情况都可以使用记录及其元数据的本地存储(数组或字典)来修复。如 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/
我正在开发一个基于 CloudKit 的应用程序,它使用 CKSubscription 通知来跟踪对公共(public)数据库的更改。每当应用程序收到推送通知时,我都会使用 CKFetchNotifi
我正在构建一个严重依赖 CloudKit 作为数据源的 iOS 应用。 安装应用程序并首次运行后,我需要下载大量驻留在 CloudKit 容器的公共(public)数据库中的数据。我使用 CKFetc
WWDC 2014 Advanced Cloudkit 视频建议:每次收到推送时,它都应该检查通知集合以查找它可能遗漏的任何内容。 我也这样做,但是如果在很短的时间内同一记录发生 2 次更新,我将收到
CKFetchNotificationChangesOperation 返回 INSERT 操作,但不总是返回 UPDATE 和 DELETE。 DELETE,UPDATE 在我将应用程序提交到 Ap
对于公共(public) CloudKit 数据库,有谁知道在初始化 CKFetchNotificationChangesOperation 时用于 previousServerChangeToken
我是一名优秀的程序员,十分优秀!