我正在我的应用程序中进行CloudKit同步(“微型数据,所有设备”模型,在私有数据库中有一个自定义区域)。
CKModifyRecordsOperation包含NSData类型的clientChangeTokenData属性,在文档中描述如下:
在从fetch操作修改记录时,使用此属性指定客户端生成的数据令牌,以指示您上次修改的记录的哪个版本。比较下一次记录提取中提供给数据令牌的数据令牌,以确认服务器已成功地接收到设备的最后修改请求。
对于每个请求,我不明白为什么要费心,因为我得到一个完成块,它告诉我服务器是否成功地接收到了我的请求。为什么我需要手动比较这个客户端令牌?
是否需要指定clientChangeTokenData才能正确处理用例?我跟踪本地数据更改,并在每次数据更改上推送队列中的所有内容。通过区域订阅跟踪远程更改。
如果需要,我如何正确地生成这个令牌,因为我的CKModifyRecordsOperation中有各种各样的记录更改(我的API使用的目标是批处理操作)。这里的一般工作流程是什么?
谢谢。
发布于 2017-01-11 02:56:08
从文档中还不清楚,所以我想clientChangeTokenData在发送大型修改记录操作(例如删除100个记录)时是有用的。然后假设您的应用程序在另一个操作中发送一个fetch请求,其中包含一个查询(或获取更改)结果集,这些结果集将受到以下修改的影响:
如果提取完成包含一个与修改一起发送的clientChangeTokenData不同,那么您知道它还没有收到(或者完成了处理吗?)变化还在。在这种情况下,您可能会出错,警告说服务器需要更多时间,或者在一段时间后自动重试提取。
顺便说一句,在我的测试中,这个令牌是每个设备。
发布于 2016-02-02 12:59:11
如果您有要写入CloudKit的本地更改,并且希望确保您的更改是基于CloudKit中数据的最新版本,则只需要检查令牌。
您也可以忽略令牌并保存数据。如果数据在同一时间内发生了变化,您将得到一个CloudKit错误,然后您可以处理它。
https://stackoverflow.com/questions/35152586
复制相似问题