Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 字典保存错误“;SwiftValue encodeWithCoder::无法识别的选择器发送到实例";_Arrays_Swift_Dictionary_Nsuserdefaults - Fatal编程技术网

Arrays 字典保存错误“;SwiftValue encodeWithCoder::无法识别的选择器发送到实例";

Arrays 字典保存错误“;SwiftValue encodeWithCoder::无法识别的选择器发送到实例";,arrays,swift,dictionary,nsuserdefaults,Arrays,Swift,Dictionary,Nsuserdefaults,我想保存一个save a dictionary,但我一直收到以下错误消息:“SwiftValue encodeWithCoder::无法识别的选择器发送到实例”。以下是我如何保存字典的方法: func savePlaces(){ let placesData = NSKeyedArchiver.archivedData(withRootObject: Resultaat?.reisdelen) UserDefaults.standard.set(placesData, for

我想保存一个save a dictionary,但我一直收到以下错误消息:“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()
         }
     }
 }
如何尝试加载字典:

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?
}

您可以将模型保存到
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)
        }
    }
    
我希望这是你试图找到的答案


享受吧

您好,Emre-Ciftci,我有一个错误:“在“Array”上引用实例方法“encode”要求“reisedelen”符合“Encodable”。您知道如何解决这个问题吗?只需遵循“可编码”协议而不是可解码协议即可“可编码”是“可编码”和“可解码”的混合。