10

我正在我的应用程序中处理 CloudKit 同步(“微小数据,所有设备”模型,在私有数据库中有一个自定义区域)。

CKModifyRecordsOperation包含文档中描述clientChangeTokenData的类型的属性,NSData如下所示:

当您从 fetch 操作中修改记录时,请使用此属性指定客户端生成的数据标记,以指示您上次修改的记录版本。将您提供的数据令牌与下一条记录获取中的数据令牌进行比较,以确认服务器已成功接收到设备的最后一次修改请求。

考虑到每个请求,我不明白为什么要打扰,我会收到一个完成块,告诉我服务器是否已成功接收到我的请求。为什么我需要手动比较这个客户端令牌?

是否需要指定clientChangeTokenData才能正确处理我的用例?我跟踪本地数据更改并在每次数据更改时推送队列中的所有内容。通过区域订阅跟踪远程更改。

CKModifyRecordsOperation如果需要,鉴于我的(我的 API 使用旨在进行批处理操作)中有各种记录更改,我如何正确生成此令牌。这里的一般工作流程是什么?

谢谢你。

4

2 回答 2

5

从文档中不清楚,所以我猜这clientChangeTokenData在发送大型修改记录操作的情况下很有用,例如删除 100 条记录。然后说您的应用程序在另一个操作中发送一个获取请求,其中包含一个查询(或获取更改)结果集,该结果集将受到以下修改的影响:

  1. 已启动并与尚未完成的现有修改操作同时运行。
  2. 在服务器完成处理先前修改的结果之前启动(文档倾向于暗示处理延迟)。

如果获取完成包含clientChangeTokenData与随修改一起发送的不同,那么您知道它尚未收到(或完成处理?)更改。在这种情况下,您可能会出错,提示服务器需要更多时间,或者在一段时间后自动重试获取。

顺便说一句,在我的测试中,这个令牌是每个设备的。

于 2017-01-11T02:56:08.253 回答
3

如果您有要写入 CloudKit 的本地更改,并且您希望确保您的更改基于 CloudKit 中最新版本的数据,则您只有检查令牌的理由。

您也可以忽略令牌并保存数据。如果同时数据发生了变化,你会得到一个 CloudKit 错误,然后你可以处理它。

于 2016-02-02T12:59:11.560 回答