I want to save a save a dictionary, but I keep getting this error message: "SwiftValue encodeWithCoder:]: unrecognized selector sent to instance". This is how I try to save the Dictionary:
func savePlaces(){
let placesData = NSKeyedArchiver.archivedData(withRootObject: Resultaat?.reisdelen)
UserDefaults.standard.set(placesData, forKey: "Reis")
}
How I try to load the dictionary:
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()
}
}
}
My Struct:
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?
}
You can save the model to UserDefaults
like this:
Firstly you should create an instance of your model
Then you can save your model to UserDefaults
like:
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(modelInstance) {
let defaults = UserDefaults.standard
defaults.set(encoded, forKey: "Reis")
}
You can get model from UserDefaults
like this
if let savedItem = defaults.object(forKey: "Reis") as? Data {
let decoder = JSONDecoder()
if let loadedItem = try? decoder.decode(YourModel.self, from: savedItem) {
print(loadedItem)
}
}
I hope it is the answer you try to find.
Enjoy!