如何解决设置HKQueryAnchor时,如何在iOS 12.0中弃用“ unarchiveObjectwith :)”?
我在制作HKQueryAnchor
时使用下面的代码来设置HKAnchoredObjectQuery
,但是不赞成使用'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
和 JSONEncoder
将data
与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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。