如何走动';未归档对象(带:)';在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以符合可解码