目錄:[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 }