Reputation: 13906
I have a class that conforms to NSCoding
:
class Middleware : NSObject, NSCoding {
var name: String
var uri: String
// MARK: NSCoding
required init?(coder aDecoder: NSCoder) {
name = aDecoder.decodeObject(forKey: "name") as! String
uri = aDecoder.decodeObject(forKey: "uri") as! String
}
func encode(with: NSCoder) {
with.encode(name, forKey: "name")
with.encode(uri, forKey: "uri")
}
}
Storing that class in UserDefaults fails:
userDefaults.set(Middleware(name: "Volkszaehler Demo", uri: "http://demo.volkszaehler.org/middleware.php"), forKey: "middlewares")
Gives:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object for key middlewares'
Upvotes: 1
Views: 117
Reputation: 13906
Got it- custom object needs to go through the encoder first:
let encodedData = NSKeyedArchiver.archivedData(withRootObject: middleware)
encodedData can then be stored.
Upvotes: 1