[英]How to encode/decode [CKRecordZone.ID: CKServerChangeToken]?
public var zonesChangeToken: [CKRecordZone.ID: CKServerChangeToken]? {
get {
if(backingPreviousZonesChangeToken == nil) {
guard let defaults: UserDefaults = UserDefaults(suiteName: CloudKitHandler.APP_GROUP_ID) else { return nil }
guard let data = defaults.data(forKey: CloudKitHandler.CK_PREVIOUS_ZONES_CHANGE_TOKEN)
else { return [CKRecordZone.ID: CKServerChangeToken]() }
do {
let unarchiver: NSKeyedUnarchiver = try NSKeyedUnarchiver(forReadingFrom: data)
unarchiver.requiresSecureCoding = true
backingPreviousZonesChangeToken = try unarchiver.decodeTopLevelObject() as? [CKRecordZone.ID: CKServerChangeToken]
} catch { }
}
return backingPreviousZonesChangeToken
}
set(value) {
backingPreviousZonesChangeToken = value
guard let value = value else { return }
guard let defaults: UserDefaults = UserDefaults(suiteName: CloudKitHandler.APP_GROUP_ID) else { return }
let archiver: NSKeyedArchiver = NSKeyedArchiver(requiringSecureCoding: true)
archiver.encode(value)
archiver.finishEncoding()
defaults.setValue(archiver.encodedData, forKey: CloudKitHandler.CK_PREVIOUS_ZONES_CHANGE_TOKEN)
}
}
I'm trying to encode/decode a dictionary of IDs and Tokens.我正在尝试编码/解码 ID 和令牌的字典。 But for some reason the decode always gives me a nil.
但出于某种原因,解码总是给我一个零。
How to fix?怎么修?
extension CKServerChangeToken {
func dataRepresentation() -> Data {
let coder = NSKeyedArchiver.init(requiringSecureCoding: true)
coder.requiresSecureCoding = true
self.encode(with: coder)
coder.finishEncoding()
return coder.encodedData
}
class func token(data: Data) -> CKServerChangeToken? {
do{
let coder = try NSKeyedUnarchiver(forReadingFrom: data)
coder.requiresSecureCoding = true
let record = CKServerChangeToken(coder: coder)
coder.finishDecoding()
return record
} catch {
print(error)
}
return nil
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.