CKFetchRecordChangesOperation首先返回垃圾数据

时间:2016-06-11 23:58:25

标签: ios cloudkit ckfetchrecordchangesopera

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

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

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

为什么会出现这种情况?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

这是它引起的问题,以及我必须做些什么......

我有两种类型的记录组和成员(必须有一个组作为其父组。)

问题在于,尽管CloudKit通常首先返回记录的父记录,但它只会在一个批处理中执行此操作。

因此,如果成员位于不同的批次中,则可能会在其父组之前收到成员(如果随后编辑或重命名了某个组,则会发生这种情况,因为这会在处理顺序中稍后移动)

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