В моем приложении я использую 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
?
Какой подход будет наилучшим?
Swift 3, Xcode 9