2

所以我目前使用以下方法来获取和设置区域更改令牌:

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)
    }
}

我尝试通过创建从数据库到区域的路径来唯一地定位区域。但是,由于共享数据库可能有多个具有相同区域名称的区域,因此我附加了区域所有者名称。

问题是,这是存储区域更改令牌的正确方法还是有更好、更有效的方法?

4

0 回答 0