我的问题与在“WWDC 2014 Advanced CloudKit”中命名的“Delta Download”相关。CloudKit:CKFetchRecordChangesOperation,CKServerChangeToken和Delta Download
我正在尝试为我的Core Data应用程序进行同步,这是目前仅有的iPhone(请考虑:只有一个设备处于活动状态)。因此,基本上应用程序会将用户记录存储在同一台设备的云中,目前大多数情况下都是如此。
我无法理解基于CKFetchRecordChangesOperation
或Delta下载的自定义区域功能。
正如我所知道的那样,我们有CKServerChangeToken
来维护同步操作(我的意思是只下载那些由另一个设备添加/修改/删除的记录),就像在WWDC上展示的那样。 但是,我不明白的是,我们仅在CKFetchRecordChangesOperation
后收到该令牌,当我们将记录保存到云中时,我们没有获得新的令牌。
如果我们使用当前可用的令牌进行提取(因为它只在提取后才改变),我们会收到从我们以前的保存操作中保存的记录。基本上,我们可以保存我们设备上已有的记录。为什么?我在这里错过了什么?
如果我们向云(从设备A)播种一些数据,那么设备B获取区记录时的情况是正确的,但如果设备A是?再次下载所有记录?
我发现recordChangeTag
在CKRecord
,这是我可以用解决与本地对象冲突的属性 - 获取对象(相同或不同的版本),如果这样能有人给我举例我是如何做到这一点:保存recordChangeTag首次将记录保存到CloudKit时的核心数据还是如何?
缺乏文档是如此头疼。
我实际上已经与Apple就这个问题开了一个支持案例。使用'CKFetchRecordChangesOperation'告诉设备的变化是没有意义的。我被坦率地告知 - 事情就是这样。因此,您的代码需要处理所有这些冗余记录更改。 – rmaddy
@rmaddy哦,谢谢你的信息。如果你把它写成答案,我会接受它,因为没有其他答案,你是最接近的答案。 –
@rmaddy我读过你对苹果devforum Rick的讨论,我想问你,你是否尝试了PIK建议的解决方法?链接讨论:https://forums.developer.apple.com/message/77233#77233 –