zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

从 CloudKit 公共核心数据存储中删除记录

存储数据 删除 记录 核心 公共 CloudKit
2023-09-11 14:18:47 时间

image.png

问题

当您尝试使用仪表板或其他同步设备从 CloudKit 的公共数据库中删除记录时,您会遇到问题,即某些设备不会反映更改。删除的记录仍将包含在设备的核心数据存储中,该存储应与 CloudKit 同步,这是为什么呢?

这不是错误。这是多个设备在公共 CloudKit 数据库中协同工作的方式。在私有 CloudKit 同步核心数据存储中,记录会立即在所有设备上删除,为什么这在公共数据库中有所不同?

私有数据库

如果在一台设备上的私有存储中删除了一条记录,则此更改将导出到 CloudKit 中的私有数据库,并会留下一个墓碑。此逻辑删除包含记录 ID 和记录类型,因此您可以知道用户在设备上删除了哪条记录。当另一个设备从数据库导入此更改时,将使用CKFetchRecordZoneChangesOperation获取此墓碑。获取后,记录在另一台设备上被删除。最终,所有设备都拥有相同的云端状态。

公共数据库

在公共数据库中,当设备上的记录被删除并将更改导出到云端时,云端中的记录将立即被删除。现在另一台设备使用CKQueryOperation从云中获取,但之前删除的记录已不再包含在云中,因此没有任何新内容可以导入。现在,不同设备上的云中存在不同的状态,这是一个问题。

解决方案

您可以识别一条记录是否包含在公共数据库中,以确定您是否应该删除它或保留它。NSPersistentCloudKitCont