2

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

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

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

任何想法为什么会这样?

4

2 回答 2

3

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

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

于 2016-06-15T00:05:40.900 回答
0

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

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

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

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

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

于 2016-06-15T11:40:17.297 回答