字典保存错误“ SwiftValue encodeWithCoder:]:无法识别的选择器已发送到实例”

时间:2019-11-10 12:12:15

标签: arrays swift dictionary nsuserdefaults

我想保存一个保存字典,但我不断收到此错误消息:“ SwiftValue encodeWithCoder:]:无法识别的选择器发送到实例”。这是我尝试保存字典的方法:

func savePlaces(){
     let placesData = NSKeyedArchiver.archivedData(withRootObject: Resultaat?.reisdelen)
     UserDefaults.standard.set(placesData, forKey: "Reis")
}

我如何尝试加载字典:

var Reis = [reisdelen]()
func loadPlaces(){
     let placesData = UserDefaults.standard.object(forKey: "Reis") as? NSData

     if let placesData = placesData {
         let placesArray = NSKeyedUnarchiver.unarchiveObject(with: placesData as Data) as? [reisdelen]

         if let placesArray = placesArray {
             Reis = placesArray
             TableView.reloadData()
         }
     }
 }

我的结构:

struct reismogelijkheden: Decodable {
    let reisdelen: [reisdelen]?
    let reistijd: reistijd?
    let reistijdActueel : reistijdActueel?
    let aantalOverstappen: Int?
    let vertrektijd: String?
    let vertrektijdVertraging: vertrektijdVertraging?
    let aankomsttijd: String?
}

struct reisdelen: Decodable {
    let vervoerder: String?
    let richting: String?
    let treinnummer: String?
    let lijn: String?
    let stops: [stops]?
    let modaliteit: modaliteit?
    let travelTimeInMinutes: Int?
    let travelDistanceInMeters: Int?
}

1 个答案:

答案 0 :(得分:0)

您可以像这样将模型保存到UserDefaults

  • 首先,您应该创建模型的实例

  • 然后,您可以像以下那样将模型保存到UserDefaults

    let encoder = JSONEncoder()
    if let encoded = try? encoder.encode(modelInstance) {
        let defaults = UserDefaults.standard
        defaults.set(encoded, forKey: "Reis")
    }
    

    您可以像这样从UserDefaults获取模型

    if let savedItem = defaults.object(forKey: "Reis") as? Data {
        let decoder = JSONDecoder()
        if let loadedItem = try? decoder.decode(YourModel.self, from: savedItem) {
            print(loadedItem)
        }
    }
    

我希望这是您尝试找到的答案。

享受!