【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地址 >>

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,313评论 30 472
  • 1、 沙盒概念基本介绍 iOS 应用程序只能在该 app 的文件系统中读取。这个默认的 app 文件系统就是我们说...
    Laughingg阅读 7,749评论 2 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,240评论 25 709
  • 很多时候,我们设立了一个目标,确往往难以达成,事后回想起来,会解释说:是有人找我聊另外的事,又或者说当时做到一半没...
    碎炎星痕阅读 1,196评论 0 0
  • 黑金鲍是新西兰独有的著名物产,纽西兰国家形象代表物之一。是纯野生、零污染的原生态高端海珍品。新西兰坐落于太平洋的最...
    厨影美食阅读 5,786评论 0 0