美文网首页
【iOS开发】数据存储——使用NSKeyedArchiver归档

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

作者: Lebron_James | 来源:发表于2017-02-13 22:55 被阅读65次

有些时候我们要保存一个自定义类的实例,我们可以使用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归档

      本文链接:https://www.haomeiwen.com/subject/wlwtwttx.html