[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 }
相關文章
相關標籤/搜索