如何从 CloudKit 更新所有客户端记录?
Posted
技术标签:
【中文标题】如何从 CloudKit 更新所有客户端记录?【英文标题】:How to update all client records from CloudKit? 【发布时间】:2014-12-30 10:35:30 【问题描述】:我的应用程序在本地存储CloudKit
存储的所有记录。所以不是大数据小手机的概念,而是全数据服务器-全数据客户端的概念。当应用再次启动时,我需要不时更新所有内容。
我应该为所有现有记录类型设置CKSubscription
吗?
我应该在应用启动时删除所有本地记录并从CloudKit
重新下载以获取更新吗?
【问题讨论】:
【参考方案1】:CloudKit 为此提供了CKFetchRecordChangesOperation
。您可以请求自上次更新以来区域内的所有更改。然后,您可以将该数据与应用内的存储同步。
如果您确实使用订阅,那么如果在短时间内发送多个通知,那么您的应用很可能无法收到所有通知。苹果会限制这一点。这就是为什么在处理收到的订阅通知后,您还应该在收到通知后执行CKFetchNotificationChangesOperation
。
【讨论】:
所以您建议对于频繁更改的记录类型只使用CKFetchRecordChangesOperation
而不使用远程通知?
是的,ckFetchRecordChangesOperation 将在没有 CKSubscription 的情况下工作。您甚至可以从所有已更改的记录类型中获取所有数据。选择这个而不是订阅是一个功能性的决定。如果您的 recordType 包含需要最新的重要数据,则可以同时使用两者。然后请记住,您也会收到与 CKFetchRecordChangesOperation 相同的更改
您还必须注意 CKFetchRecordChangesOperation 将为您提供区域内的所有数据。因此,如果客户端不需要所有数据,那么这可能不适合您。
CKFetchRecordChangesOperation
自 ios 10 起已弃用 :(以上是关于如何从 CloudKit 更新所有客户端记录?的主要内容,如果未能解决你的问题,请参考以下文章
如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象
如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象