swift4--NSKeyedArchiver数据文件的归档和解析

首先创建一个基本对象模型

添加一个快捷文件

import Foundation
//创建一个基本对象模型
//创建一个继承自NSObject的类,并遵守NSCoding协议,可以被序列化或者反序列化,这样可以归档到磁盘或者分发到网络上
class UserModel: NSObject,NSCoding{
//    为对象模型添加姓名和密码两个属性
    var name:NSString!
    var password:NSString!
//    添加一个协议方法,用来对模型对象进行序列化操作
    func encode(with aCoder: NSCoder) {
//        对模型的姓名和密码属性进行编码操作,并设置对应的键名
        aCoder.encode(self.name, forKey: "name")
        aCoder.encode(self.password, forKey: "password")
    }
//    添加另一个来自协议的方法,用来对模型对象进行反序列化操作
    required init?(coder aDecoder: NSCoder) {
        super.init()
//        对模型的姓名和属性,根据键名进行解码操作
        self.name = aDecoder.decodeObject(forKey:"name") as! NSString
        self.password = aDecoder.decodeObject(forKey:"password") as! NSString
    }
//    重载父类初始化方法
    override init() {
        
    }
}

然后在Viewcontroller.swift文件中进行归档和恢复归档的操作

//使用归档的方法对模型对象进行持久化工作
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
//        创建一个模型对象,并对其进行归档和恢复归档的操作
//        初始化刚才定义的对象模型
        let user1 = UserModel()
//        设置名称,密码属性的值
        user1.name = "Jerry"
        user1.password = "123"
        
//        创建一个可变二进制数据对象,用来储存归档后的模型对象
        let data = NSMutableData()
//        使数据对象,初始化一个键值归档对象
        let archive = NSKeyedArchiver(forWritingWith: data)
//        对模型对象进行归档操作,(归档操作是指将swift对象,存储为一个文件或者网络上的一个数据块)
        archive.encode(user1, forKey: "user1Key")
//        完成编码,即序列化工作
        archive.finishEncoding()
        
//        初始化一个字符串对象,作为归档文件的存储路径
        let filePath = NSHomeDirectory() + "/Documents/contacts.data"
//        将归档文件存储在程序包的指定位置
        data.write(toFile: filePath, atomically: true)
        
//        对归档文件进行加载和恢复
//        读取刚刚保存的二进制文件
        let fileData = NSMutableData(contentsOfFile: filePath)
//        然后对文件恢复归档,将文件或者来自网络的数据块恢复成swift对象
        let unarchiver = NSKeyedUnarchiver(forReadingWith: fileData! as Data)
//        根据设置的键名对数据进行恢复归档操作,并获得其最终结果
        let saveUser = unarchiver.decodeObject(forKey: "user1Key") as! UserModel
//        完成对象的解码操作
        unarchiver.finishDecoding()
        
        print(saveUser.name)
        print(saveUser.password)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

猜你喜欢

转载自blog.csdn.net/weixin_41735943/article/details/81253763
今日推荐