本文将演示如何使用归档的方法,对模型对象进行持久化工作。
在项目名称上点击鼠标右键,弹出右键菜单,选择【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 }