gpt4 book ai didi

ios - CloudKit:CKFetchRecordChangesOperation、CKServerChangeToken 和 Delta 下载

转载 作者:可可西里 更新时间:2023-11-01 05:43:18 26 4
gpt4 key购买 nike

我的问题与 WWDC 2014 Advanced CloudKit 中命名的“Delta Download”有关。

我正在尝试为我的 Core Data 应用程序进行同步,该应用程序目前仅适用于 iPhone(想想:只有一台设备处于事件状态)。因此,基本上,对于目前的大多数情况,该应用程序将从同一台设备将用户记录存储在云中。

我无法理解基于 CKFetchRecordChangesOperation 又名 Delta 下载的自定义区域功能。

正如我所说的那样,我们有 CKServerChangeToken 来维护同步操作(我的意思是只下载那些被另一台设备添加/修改/删除的记录),正如 WWDC 上所展示的那样。但是,我无法理解的是,我们仅在 CKFetchRecordChangesOperation 之后收到该 token ,当我们将记录保存到云中时,我们没有获得新 token 。

如果我们使用当前可用的 token 进行提取(因为它仅在提取后更改),我们会收到从之前的保存操作中保存的记录。基本上我们得到了我们设备上已有的保存记录。为什么?我在这里遗漏了什么?

如果我们将一些数据(从设备 A)播种到云端会怎么样,这对于设备 B 正在获取区域记录的情况是合理的,但是如果设备 A 呢?重新下载所有记录?

我在 CKRecord 中找到了 recordChangeTag,这是我可以用来解决与本地对象冲突的属性吗 - 获取的对象(相同或不同版本),如果可以的话有人给我举例说明我需要如何执行此操作:在第一次将记录保存到 CloudKit 时将 recordChangeTag 保存到 Core Data 或者如何保存?

缺乏文档真是令人头疼。

最佳答案

我找时间写了这个问题的答案。我不会深入实现,但会讨论这个概念。

CloudKit 提供了一种在您的设备和 CloudKit 服务器之间进行数据同步的方法。在我的案例中,我仅使用 iPhone 和服务器建立同步过程(同样,如果您有 iPhone + iPad 应用程序,该过程需要更多步骤。):

我在私有(private)云数据库中有自定义区域。我使用 OperationQueue 来建立相互依赖的不同异步进程。一些操作有自己的操作队列。

步骤:

1) 检查我的自定义区域是否存在

1.1) 如果没有自定义区域

1.2) 创建新的自定义区域。 (可选:添加记录)

1.3) 刷新区域更改 token

You can refresh zone change token by: performing CKFetchRecordChangesOperation, fetchRecordChangesCompletionBlock returns CKServerChangeToken save it to UserDefaults (for example) using NSKeyedArchiver). This operation's task is to refresh token and it's performed at the end synchronisation process.

2) 如果已经有自定义区域

2.1) 使用先前保存的区域更改 token 从区域获取更改。 (CKFetchRecordChangesOperation)

2.2) 更新和删除本地记录。

2.3) 刷新区域更改 token 。

2.4) 检查本地更改(我使用上次云同步时间戳检查之后修改了哪些记录)。

2.5) 上传记录到云包数据库

2.6) 再次刷新区域更改 token 。

我强烈推荐 Nick Harris 文章系列:https://nickharris.wordpress.com/2016/02/09/cloudkit-core-data-nsoperations-introduction/

您会在那里找到实现和设计概念。值得一读。我希望有人会发现所有这些都有帮助。

关于ios - CloudKit:CKFetchRecordChangesOperation、CKServerChangeToken 和 Delta 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com