[Xcode 实际操作]七、文件与数据,10NSkeyedArchiver存储和解析数据,Swift对象的归档和恢复归档

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[Swift]Xcode实际操作

本文将演示如何使用归档的方法,对模型对象进行持久化工作。

在项目名称上点击鼠标右键,弹出右键菜单,选择【New File】新建文件命令,

在弹出的模板选项窗口中,选择【Swift】文件选项,创建一模型对象。

->【Next】->在存储为输入框内,输入属性列表文件的名称,

【Save As】:UserModel.swift

->然后点击创建【Create】按钮,确认属性列表文件的创建

在自动打开的代码文件【UserModel.swift】中,创建一个基本对象模型。

 1 import Foundation
 2 
 3 //创建一个继承自NSObject的类,并遵守NSCoding协议
 4 //遵守NSCoding协议的类,可以被序列化和反序列化,
 5 //这样可以归档到磁盘上或分发到网络上
 6 class UserModel: NSObject, NSCoding
 7 {
 8     //添加姓名属性
 9     var name:NSString!
10     //添加密码属性
11     var password:NSString!
12     
13     //添加一个来自协议的方法,用来对模型对象进行序列化操作
14     func encode(with aCoder: NSCoder)
15     {
16         //对模型的姓名进行编码操作,并设置对应的键名
17         aCoder.encode(self.name, forKey: "name")
18         //对模型的密码进行编码操作,并设置对应的键名
19         aCoder.encode(self.password, forKey: "password")
20     }
21     
22     //添加一个来自协议的方法,用来对模型对象进行反序列化操作
23     required init(coder aDecoder: NSCoder)
24     {
25         super.init()
26         //对模型对象的姓名属性,根据对应的键名,进行解码操作
27         self.name = aDecoder.decodeObject(forKey: "name") as? NSString
28         //对模型对象的密码属性,根据对应的键名,进行解码操作
29         self.password = (aDecoder.decodeObject(forKey: "password") as! NSString)
30     }
31     
32     //重载父类的初始化方法
33     override init()
34     {
35         
36     }
37 }

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

现在开始编码,创建一个模型对象,并对其进行归档和恢复归档的操作。

归档:指的使将Swift对象,存储为一个文件或网络上的数据块。

恢复归档:指的是将一个来自文件或网络的归档数据块,恢复成内存中的一个Swift对象。

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4 
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8         
 9         //初始化上文定义的对象模型
10         let user1 = UserModel()
11         //设置对象名称的值
12         user1.name = "Jerry"
13         //设置对象密码的值
14         user1.password = "123"
15         
16         //创建一个可变二进制数据对象,用来存储归档后的模型对象
17         let data = NSMutableData()
18         //使数据对象,初始化一个键值归档对象
19         let archive = NSKeyedArchiver(forWritingWith: data)
20         //对模型对象进行归档操作。
21         //归档:指的使将Swift对象,存储为一个文件或网络上的数据块。
22         archive.encode(user1, forKey: "user1Key")
23         //完成归档的编码,即序列化操作。
24         archive.finishEncoding()
25         
26         //初始化一个字符串对象,作为归档文件的存储路径
27         let filePath = NSHomeDirectory() + "/Documents/contacts.data"
28         //将归档文件,存储在程序包的指定位置
29         data.write(toFile: filePath, atomically: true)
30         
31         //现在来对归档文件进行加载和恢复归档的操作
32         //读取刚刚保存的二进制文件
33         let fileData = NSMutableData(contentsOfFile: filePath)
34         //对文件进行恢复归档操作
35         //恢复归档:指的是将一个来自文件或网络的归档数据块,恢复成内存中的一个Swift对象。
36         let unarchiver = NSKeyedUnarchiver(forReadingWith: fileData! as Data)
37         
38         //根据设置的键名,对数据进行恢复归档操作,并获得最终结果
39         let savedUser = unarchiver.decodeObject(forKey: "user1Key") as! UserModel
40         //完成对象的解码操作
41         unarchiver.finishDecoding()
42         
43         //在控制台打印输出对象的两个属性
44         print(savedUser.name)
45         print(savedUser.password)
46     }
47 
48     override func didReceiveMemoryWarning() {
49         super.didReceiveMemoryWarning()
50         // Dispose of any resources that can be recreated.
51     }
52 }