CKFetchRecordChangesOperation returns 垃圾数据优先

CKFetchRecordChangesOperation returns junk data first

当 previousServerToken 为 null 时,CKFetchRecordChangesOperation 似乎需要多次通过才能下载第一组数据,重试直到 moreComing 标志被清除。

不是因为记录太多- 在我的测试中,我只有大约 40 条成员记录,每条记录都属于 6 个组中的一个。

第一遍给出了两个格式错误的成员记录;第二遍有时会从尚未下载的组中发送一些成员记录,或者什么也不发送。只有在第三遍之后,它才会按预期下载所有剩余的组和成员。

知道为什么会这样吗?

如果区域中删除了很多记录,就会发生这种情况。服务器扫描该区域的所有更改,然后删除已删除记录的更改。有时这会导致一批零记录更改的更改,但 moreComing 设置为 true。

查看 iOS 10/macOS 10.12 中 CKFetchRecordZoneChangesOperation 上的新 fetchAllChanges 标志。 CloudKit 将为您通过管道获取更改请求,您只会看到记录更改和区域更改令牌,直到区域中的所有内容都已获取。

这是它造成的问题,我必须做些什么...

我有两种类型的记录 - 组和成员(必须有一个组作为他们的 parent。)

问题是,虽然 CloudKit 通常首先 returns parents 条记录,但它只会在一个批次内执行此操作。

因此,如果成员在不同的批次中,可能会在他们的 parent 组之前收到成员(如果组随后被编辑或重命名,可能会发生这种情况,因为这会在处理顺序中将其移到后面)

如果您在设备上使用数组来表示下载的数据,则您需要在一系列批次中缓存成员,并在最后(在收到所有组之后)处理它们,或者允许记录以创建一个临时虚拟组,当它最终到达时会被该组名称和其他数据覆盖。