所以我目前使用以下方法来获取和设置区域更改令牌:
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)
}
}
我尝试通过创建从数据库到区域的路径来唯一地定位区域。但是,由于共享数据库可能有多个具有相同区域名称的区域,因此我附加了区域所有者名称。
问题是,这是存储区域更改令牌的正确方法还是有更好、更有效的方法?