I have a class Users
. And I use NSKeyedArchiver
add this in NSUserDefaults
, but this does not work.
This is my code:
let encodedData = NSKeyedArchiver.archivedData(withRootObject: self.user) as Data
self.prefs.setValue(encodedData, forKey: "user")
Error: libc++abi.dylib: terminating with uncaught exception of type NSException
And this is my class Users
class Users : NSObject, NSCoding {
var token : String?
var username : String?
var phone : String?
var email: String?
var date : Date?
var language : String?
var age : Int?
override init() {
}
init(token : String, username : String, phone : String, email: String, date : Date, language : String, age : Int) {
self.token = token
self.username = username
self.phone = phone
self.email = email
self.date = date
self.language = language
self.age = age
}
required init(coder aDecoder: NSCoder) {
self.token = aDecoder.decodeObject(forKey: "token") as? String
self.username = aDecoder.decodeObject(forKey: "username") as? String
self.phone = aDecoder.decodeObject(forKey: "phone") as? String
self.email = aDecoder.decodeObject(forKey: "email") as? String
self.date = aDecoder.decodeObject(forKey: "date") as? Date
self.language = aDecoder.decodeObject(forKey: "language") as? String
self.age = aDecoder.decodeInteger(forKey: "age")
}
func encode(with aCoder: NSCoder) {
aCoder.encode(token, forKey:"token")
aCoder.encode(username, forKey:"username")
aCoder.encode(phone, forKey:"phone")
aCoder.encode(date, forKey:"date")
aCoder.encode(language, forKey:"language")
aCoder.encode(age, forKey:"age")
}
}