首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们应该将CKServerChangeToken分别缓存在CKDatabase和CKRecordZone中吗?

我们应该将CKServerChangeToken分别缓存在CKDatabase和CKRecordZone中吗?
EN

Stack Overflow用户
提问于 2018-09-05 23:25:14
回答 1查看 207关注 0票数 1

在我的应用程序中,我使用CloudKit和用户的私有CKDatabase来存储记录。当该应用程序在2016年WWDC上建议启动时,我会获取修改信息。

首先,我调用fetchDatabaseChanges(database: CKDatabase, databaseTokenKey: String, completion: @escaping () -> Void)方法。在changesOperation.fetchDatabaseChangesCompletionBlock中的这个方法中,我将一个CKServerChangeToken保存到userDefaults中,以获得一个键:ckDatabaseToken

我还在fetchZoneChanges(database: database, databaseTokenKey: databaseTokenKey, zoneIDs: changedZoneIDs, completion方法的changesOperation.fetchDatabaseChangesCompletionBlock中调用fetchDatabaseChanges

fetchZoneChanges方法中有一个operation.recordZoneFetchCompletionBlock。在这个块中,我们还需要将令牌的值保存到UserDefaults。我将它保存到另一个ckZoneToken变量中,在用户默认情况下。因此,在fetchZoneChanges中,我获取并保存(从/到UserDefaults) ckZoneToken值,而在fetchDatabaseChanges中,我获取并保存(从/到UserDefaults) ckDatabaseToken值。

是正确的技术吗?还是最好只使用fetchDatabaseChangesfetchZoneChanges方法is中的一个变量来存储CKServerChangeToken的值?

哪一种是最好的方法?

Swift 3,Xcode 9

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-07 12:26:29

我对这两种方法都进行了实验,并发现如果我们在用户默认情况下使用one changeToken,我们就会得到一个“坏的同步延续数据”错误。

当我使用两个单独的值来存储数据库更改和区域更改时,我没有出现错误。

因此,我认为我们必须将CKServerChangeToken分别缓存在CKDatabase和CKRecordZone中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52194577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档