如何从 CloudKit 更新所有客户端记录?

Posted

技术标签:

【中文标题】如何从 CloudKit 更新所有客户端记录?【英文标题】:How to update all client records from CloudKit? 【发布时间】:2014-12-30 10:35:30 【问题描述】:

我的应用程序在本地存储CloudKit 存储的所有记录。所以不是大数据小手机的概念,而是全数据服务器-全数据客户端的概念。当应用再次启动时,我需要不时更新所有内容。

我应该为所有现有记录类型设置CKSubscription 吗?

可能会收到很多来自服务器的通知,即使我猜有“静默模式”,iCloud 通知集合的存储容量也应该有限制。

我应该在应用启动时删除所有本地记录并从CloudKit重新下载以获取更新吗?

每次都需要更新太多数据。

【问题讨论】:

【参考方案1】:

CloudKit 为此提供了CKFetchRecordChangesOperation。您可以请求自上次更新以来区域内的所有更改。然后,您可以将该数据与应用内的存储同步。

如果您确实使用订阅,那么如果在短时间内发送多个通知,那么您的应用很可能无法收到所有通知。苹果会限制这一点。这就是为什么在处理收到的订阅通知后,您还应该在收到通知后执行CKFetchNotificationChangesOperation

【讨论】:

所以您建议对于频繁更改的记录类型只使用CKFetchRecordChangesOperation 而不使用远程通知? 是的,ckFetchRecordChangesOperation 将在没有 CKSubscription 的情况下工作。您甚至可以从所有已更改的记录类型中获取所有数据。选择这个而不是订阅是一个功能性的决定。如果您的 recordType 包含需要最新的重要数据,则可以同时使用两者。然后请记住,您也会收到与 CKFetchRecordChangesOperation 相同的更改 您还必须注意 CKFetchRecordChangesOperation 将为您提供区域内的所有数据。因此,如果客户端不需要所有数据,那么这可能不适合您。 CKFetchRecordChangesOperationios 10 起已弃用 :(

以上是关于如何从 CloudKit 更新所有客户端记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 CloudKit 订阅通知以触发记录属性更新?

如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象

如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象

如何通知另一台设备 CloudKit 记录已更新?

如何让多个用户同时更新我的​​一条 CloudKit 记录而不重叠?

无法从 Cloudkit Cloud (JS) 检索所有记录