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

目录:[Swift]Xcode实际操做html

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

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

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

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

【Save As】:UserModel.swiftui

->而后点击建立【Create】按钮,确认属性列表文件的建立编码

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

 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】加密

如今开始编码,建立一个模型对象,并对其进行归档和恢复归档的操做。spa

归档:指的使将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 }
相关文章
相关标签/搜索