Ich habe diese einfache KlasseNSCoder Absturz auf decodeBool forKey (Xcode 8, Swift 3)
import UIKit
class SimpleModel: NSObject, NSCoding {
var name : String!
var done : Bool!
init(name:String) {
self.name = name
self.done = false
}
internal required init?(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObject(forKey: "name") as! String
self.done = aDecoder.decodeBool(forKey: "done") // BUG HERE
}
func encode(with encoder: NSCoder) {
encoder.encode(self.name, forKey: "name")
encoder.encode(self.done, forKey: "done")
}
}
der Code speichern:
let data = NSKeyedArchiver.archivedData(withRootObject: storageArray)
UserDefaults.standard.set(data, forKey: "storage")
UserDefaults.standard.synchronize()
der gelesene Code:
if let data = UserDefaults.standard.data(forKey: "storage") {
storageArray = NSKeyedUnarchiver.unarchiveObject(with: data) as! [SimpleModel]
}
die Problem tritt auf, wenn der NSKeyedUnarchiver seine Aufgabe erledigt. Ich kann nicht verstehen, wo das Problem herkommt.
Danke!
Ich konnte nicht oben verstehen, ich habe die Lösung aus dieser Antwort: https://Stackoverflow.com/a/39656687/1298362 – g212gs
danke für eine aufschlussreiche Antwort, nicht nur "hier machen es funktioniert, indem Sie das tun ...." – TheFuquan