在 CloudKit 中,添加记录后,新记录将不会显示在立即执行的查询中.如何解决



我正在使用CloudKit开发iOS应用程序。我有一个问题:使用 CKModifyRecordsOperation 添加记录后,如果我立即使用 CKQueryOperation 进行查询以获取所有记录,那么通常最新的记录不会出现在查询结果中。似乎最新记录将出现在写入操作几秒钟后执行的查询中。那么,如何解决呢?

在我的应用中,当用户添加新记录时,应用将刷新所有记录的列表。但在大多数情况下,列表不会有新记录。只有在用户稍后刷新列表后,才会显示记录。

我撞

了同样的问题,并与Apple支持人员进行了交谈以获得官方答案:

"您描述的行为是意料之中的,因为 CloudKit 需要一段时间来索引更改,并且不会返回尚未编制索引的记录。

解决方案是使用CKFetchRecordChangesOperation,如果数据位于私有数据库的自定义区域中。如果您使用的是公共数据库或私有数据库的默认区域,请考虑以下事项:

  1. 进行更改的设备知道更改。[意思是:保留您所做的更新的缓存]
  2. 其他对等设备使用 CKQuerySubscription 观察更改。

执行更新之前获取记录数

然后在执行更新的代码中,在更新结束时,获取另一个记录计数。 如果此计数与更新前的计数相同,则"等待"(swift 具有等待功能),直到计数比更新前计数多 1

最新更新