【iOS开发】数据存储——使用NSKeyedArchiver归档

有些时候我们要保存一个自定义类的实例,我们可以使用NSKeyedArchiver来实现。要使用NSKeyedArchiver保存,这个类必须实现NSCoding协议。

自定义类

我们新建的一个自定义类如下(注意:自定义类必须继承自NSobject,否则这个类的实例无法保存成功):

class Person: NSObject, NSCoding {
    
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    // MARK: - NSCoding     

     required init?(coder aDecoder: NSCoder) {
        self.name = aDecoder.decodeObject(forKey: "name") as! String
        self.age = aDecoder.decodeInteger(forKey: "age")
        super.init()
    }
    
    func encode(with aCoder: NSCoder) {
        aCoder.encode(age, forKey: "age")
        aCoder.encode(name, forKey: "name")
    }

}

保存实例

// 获取保存路径
let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
let personPath = documentPath! + "/lebron.archive"
        
// 实例化一个Person
let lebron = Person(name: "lebron", age: 24)
        
// 保存数据
let success = NSKeyedArchiver.archiveRootObject(lebron, toFile: personPath)
if success {
  print("保存成功")
}
        
// 读取数据
if let person = NSKeyedUnarchiver.unarchiveObject(withFile: personPath) as? Person {
  print(person.name)
  print(person.age)
}

Demo地址 >>

如果文中有错误,请指出!我们共同学习,共同进步。谢谢!

你可能感兴趣的:(【iOS开发】数据存储——使用NSKeyedArchiver归档)