gpt4 book ai didi

ios - 将 CKServerChangeToken 保存到核心数据

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:05 24 4
gpt4 key购买 nike

我使用 CloudKit 和 Core Data 以及 Swift 来同步我的数据。因此,我创建了订阅,并在收到通知后从云端获取新数据以更新我的核心数据。这是处理此更新的推荐方法。为了获取数据更改,我可以插入一个 CKServerChangeToken 来获取新内容。我的问题是如何将 token 保存到核心数据以供以后获取请求?对于 CKRecords,有一种方法可以仅保存元数据,但对于 CKServerChangeToken 则没有这样的方法。有人有想法吗?

最好的问候,Jannik

最佳答案

CKServerChangeToken 是一个不透明的数据对象,它继承自 NSObject 并符合 NSCopying 协议(protocol),这意味着您可以使用 NSKeyedArchiver 和 NSKeyedUnarchiver 将 token 转换为 (NS)Data 对象。

然后,(NS)Data 对象可以存储到任何 NSManagedObject 的属性中。或者,您可以将此数据存储在 (NS)UserDefaults 中。作为 UserDefaults 的快速扩展,这是一种实现此目的的方法:

import Foundation
import CloudKit

public extension UserDefaults {

public var serverChangeToken: CKServerChangeToken? {
get {
guard let data = self.value(forKey: "ChangeToken") as? Data else {
return nil
}

guard let token = NSKeyedUnarchiver.unarchiveObject(with: data) as? CKServerChangeToken else {
return nil
}

return token
}
set {
if let token = newValue {
let data = NSKeyedArchiver.archivedData(withRootObject: token)
self.set(data, forKey: "ChangeToken")
} else {
self.removeObject(forKey: "ChangeToken")
}
}
}
}

使用此扩展,您可以直接从 (NS)UserDefaults 获取/设置 CKServerChangeToken:

let changeToken = UserDefaults.standard.serverChangeToken
UserDefaults.standard.serverChangeToken = `newToken`

正如所指出的,NSKeyedUn/Archiver 调用在 iOS 12 中已被弃用。这是一个更新的示例。

import Foundation
import CloudKit

public extension UserDefaults {

public var serverChangeToken: CKServerChangeToken? {
get {
guard let data = self.value(forKey: "ChangeToken") as? Data else {
return nil
}

let token: CKServerChangeToken?
do {
token = try NSKeyedUnarchiver.unarchivedObject(ofClass: CKServerChangeToken.self, from: data)
} catch {
token = nil
}

return token
}
set {
if let token = newValue {
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: token, requiringSecureCoding: false)
self.set(data, forKey: "ChangeToken")
} catch {
// handle error
}
} else {
self.removeObject(forKey: "ChangeToken")
}
}
}
}

关于ios - 将 CKServerChangeToken 保存到核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40589140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com