如何走动';未归档对象(带:)';在iOS 12.0中设置HKQueryAnchor时是否已弃用?
我在制作如何走动';未归档对象(带:)';在iOS 12.0中设置HKQueryAnchor时是否已弃用?,ios,swift,healthkit,nskeyedarchiver,Ios,Swift,Healthkit,Nskeyedarchiver,我在制作HKAnchoredObjectQuery时使用了下面的代码来设置HKQueryAnchor,但是“unarchiveObject(with:)”已被弃用,我不知道如何使用新的API编写它 private func getAnchor() -> HKQueryAnchor? { let encoded = UserDefaults.standard.data(forKey: AnchorKey) if(encoded == nil){
HKAnchoredObjectQuery
时使用了下面的代码来设置HKQueryAnchor
,但是“unarchiveObject(with:)”已被弃用,我不知道如何使用新的API编写它
private func getAnchor() -> HKQueryAnchor? {
let encoded = UserDefaults.standard.data(forKey: AnchorKey)
if(encoded == nil){
return nil
}
let anchor = NSKeyedUnarchiver.unarchiveObject(with: encoded!) as? HKQueryAnchor
return anchor
}
private func saveAnchor(anchor : HKQueryAnchor) {
let encoded = NSKeyedArchiver.archivedData(withRootObject: anchor)
defaults.setValue(encoded, forKey: AnchorKey)
defaults.synchronize()
}
尝试使用
JSONDecoder
和jsonecoder
从HKQueryAnchor
实例获取数据,即
private func getAnchor() -> HKQueryAnchor? {
guard let encoded = UserDefaults.standard.data(forKey: AnchorKey) else {
return nil
}
let anchor = try? JSONDecoder().decode(HKQueryAnchor.self, from: encoded)
return anchor
}
private func saveAnchor(anchor : HKQueryAnchor) {
if let encoded = try? JSONEncoder().encode(anchor) {
defaults.setValue(encoded, forKey: AnchorKey)
defaults.synchronize()
}
}
这是我根据Martin R的链接得出的,好吗
private func getAnchor() -> HKQueryAnchor? {
let encoded = UserDefaults.standard.data(forKey: AnchorKey)
guard let unwrappedEncoded = encoded else { return nil }
guard let anchor = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(unwrappedEncoded as Data) as? HKQueryAnchor
else {
return nil
}
return anchor
}
private func saveAnchor(anchor : HKQueryAnchor) {
do {
let encoded = try NSKeyedArchiver.archivedData(withRootObject: anchor, requiringSecureCoding: false)
defaults.setValue(encoded, forKey: AnchorKey)
defaults.synchronize()
} catch {
return
}
}
检查此项:。我认为要使其工作,您需要扩展HKQueryAnchor以符合可解码