Custom Class object in NSUserDefault
First thing is Your Model class is subclass of NSObject and confirm to Coding Protocol
import Foundation
class Person : NSObject,NSCoding{
var name :String
var age : Int
init(name:String,age:Int){
self.name = name
self.age = age
}
func encode(with coder: NSCoder) {
coder.encode(age,forKey: “age”)
coder.encode(name,forKey: “name”)
}
required convenience init?(coder: NSCoder) {
guard let name = coder.decodeObject(forKey: “name”) as? String else { return nil }
let age = coder.decodeInteger(forKey: “age”)
self.init(name :name,age :age)
}
}
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Encoding Custom Object
let people = [Person(name: “varun”, age: 1), Person(name: “varun”, age: 2),]
do {
let encode = try NSKeyedArchiver.archivedData(withRootObject: people, requiringSecureCoding: false)
UserDefaults.standard.set(encode, forKey: “encodedData”)
print(encode)
let decoded = UserDefaults.standard.object(forKey: “encodedData”) as! Data
do {
let decodepeople = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(decoded) as? [Person]
print(decodepeople)
}catch{
}
}catch{
}
// Do any additional setup after loading the view.
}
}