CloudKit:删除记录的 CKQueryOperation
Posted
技术标签:
【中文标题】CloudKit:删除记录的 CKQueryOperation【英文标题】:CloudKit: CKQueryOperation for deleted records 【发布时间】:2016-03-30 01:26:58 【问题描述】:有没有一种方法可以在不使用CKFetchRecordChangesOperation
的情况下查询 CloudKit 以获取最近删除的项目(可能来自特定的时间戳)?我正在使用公共数据库,所以我不能使用自定义区域(这将是 CKFetchRecordChangesOperation
的要求)......所以我需要一种方法来使用公共数据库来模拟它。
我希望能够针对 CloudKit 记录中的更改有效地更新我的本地核心数据缓存。当您查询 CloudKit 记录时,CKRecord 似乎有一个 creationDate
和 modificationDate
属性,可以查询以查看最近创建/修改的记录,但这不适用于在 CloudKit 中删除的记录。
这里有什么有效的策略?
【问题讨论】:
您可以创建一个订阅,当记录被删除时会报告? 这个想法是使用查询,因为订阅依赖于推送通知,这可能可靠也可能不可靠,并且您不能使用拉动刷新功能来触发与订阅的同步 不,没有简单的方法可以查询已删除的内容。 【参考方案1】:我考虑过的一个解决方案是在 CKRecord 上维护一个“deletedDate”属性,因此当“删除”数据时,您实际上并没有从 CloudKit 中删除记录,而只是更新此属性。这将使其他设备可以查询最近已删除的记录,因此您可以更新本地缓存。您还可以定期检查已删除日期超过 1 周或其他时间的记录,并在该时间点实际删除记录(尽管您要注意多个设备同时删除记录,以及其他边缘情况)。不是最优雅的解决方案,但可以工作。如果有更好的选择,很想听听。
【讨论】:
小提示。就我而言,我需要使用 Mac OSX 应用程序为公共数据库实现多用户支持工具。所以我也将 dateDeleted 集成到 Core Data 实体中,并在 Mac OS X 部分添加了数据库同步(和订阅)。为了隐藏“已删除”的记录,添加了对 Array 控制器的简单谓词。【参考方案2】:我想到的一个解决方案是在 CKRecord 上维护一个“deletedDate”属性,
这不是必需的
你想要一个CKFetchRecordZoneChangesOperation
去这里观看 WWDC 视频:https://developer.apple.com/videos/play/wwdc2014/231/
https://developer.apple.com/icloud/
【讨论】:
请注意,此 API 现在已弃用。相反,使用 CKFetchDatabaseChangesOperation 来获取特定区域中的更改,其中包括删除。以上是关于CloudKit:删除记录的 CKQueryOperation的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 CKRecord 和 CloudKit 中的所有引用记录