在我的应用程序中,我使用 CloudKit 和用户的私有 CKDatabase 来存储记录。当应用程序启动时,我会按照 WWDC 2016 的建议获取更改。
首先,我调用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
值。
这是正确的技术吗?或者最好只使用两个fetchDatabaseChanges
和fetchZoneChanges
方法中的一个变量来存储CKServerChangeToken
?
哪个是最好的方法?
斯威夫特 3,Xcode 9