Как хранить токены изменения зоны CloudKit?
Поэтому в настоящее время я использую следующие методы для получения и установки токенов изменения зоны:
private func zoneChangeToken(for zoneID: CKRecordZoneID) -> CKServerChangeToken? {
let cacheKey = self.name(for: self.database) + "." + zoneID.zoneName + "." + zoneID.ownerName
if let data = UserDefaults.standard.data(forKey: cacheKey) {
return NSKeyedUnarchiver.unarchiveObject(with: data) as? CKServerChangeToken
} else {
return nil
}
}
private func setZoneChangeToken(changeToken: CKServerChangeToken?, for zoneID: CKRecordZoneID) {
let cacheKey = self.name(for: self.database) + "." + zoneID.zoneName + "." + zoneID.ownerName
if changeToken == nil {
UserDefaults.standard.removeObject(forKey: cacheKey)
} else {
let data = NSKeyedArchiver.archivedData(withRootObject: changeToken!)
UserDefaults.standard.set(data, forKey: cacheKey)
}
}
Я пытаюсь уникально предназначаться для зоны, создавая путь от базы данных до зоны. Однако, поскольку общая база данных может иметь несколько зон с одним и тем же именем зоны, я добавил имя владельца зоны.
Вопрос в том, является ли это правильным способом хранения токенов изменения зоны или есть лучший, более эффективный способ?