Closed reza-khalafi closed 5 years ago
Hey @reza-khalafi, what you mean by "NSObject
or Struct
"? If you have a subclass, please take a look at the Readme.md, as there are multiple ways for Codable
, RawRepresentable
, NSCoding
or custom types.
Also, currently we have a problem with non-final classes, tracked #157.
Recently, I using code like this:
import UIKit
class User: NSObject,NSCoding {
var ID:Int!
var name:String!
var email:String!
init(
ID:Int,
name:String,
email:String
) {
self.ID = ID
self.name = name
self.email = email
}
//DECODE
required convenience init?(coder decoder: NSCoder) {
guard let ID = decoder.decodeObject(forKey: "ID") as? Int else { return nil }
guard let name = decoder.decodeObject(forKey: "name") as? String else { return nil }
guard let email = decoder.decodeObject(forKey: "email") as? String else { return nil }
self.init(
ID:ID,
name:name,
email:email
)
}
//ENCODE
func encode(with aCoder: NSCoder) {
aCoder.encode(ID,forKey: "ID")
aCoder.encode(name,forKey: "name")
aCoder.encode(email,forKey: "email")
}
}//class
And Set and Get like this:
func getUserObjectFromUserDefault() -> User? {
let def = UserDefaults.standard.object(forKey:"MyUserObject")
if def == nil {
return nil
}else{
if NSKeyedUnarchiver.unarchiveObject(with: def as! Data) as? User != nil {
return NSKeyedUnarchiver.unarchiveObject(with: def as! Data) as? User
}else{
return nil
}
}
}
func setUserObjectInUserDefault(userObj:User) {
UserDefaults.standard.setValue(NSKeyedArchiver.archivedData(withRootObject: userObj), forKey: "MyUserObject")
}
Is there easier way for save my custom object in NSUserDefault?
How to save an NSObject or Struct to NSUserDefault?