ios - 设置 HKQueryAnchor 时,如何绕过 iOS 12.0 中已弃用的“unarchiveObject(with:)”?
问题描述
我在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()
}
解决方案
这是我根据 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
}
}
推荐阅读
- python - 对列中的每个唯一项进行距离计算的 Python 函数或嵌套循环
- html - HTML 模板中的网站图标
- perl - 访问要在外部显式调用的包中的 Moose 对象
- sql-server - 加入返回重复行
- javascript - 关于javascript范围?
- authentication - 防止多次创建刷新令牌
- javascript - vuelidate 在模糊上没有按预期工作
- vue.js - vue中什么时候使用render函数?
- java - checkmarx 在静态方法中看不到代码
- javascript - 使用 javascript 在 Safari 上的同一选项卡上打开一个新窗口