1. 程式人生 > >IOS資料處理及版本特性-NSKeyedArchiver儲存和解析

IOS資料處理及版本特性-NSKeyedArchiver儲存和解析

建立一個繼承自物件的類可被序列化和反序列化,這樣的話就可以歸檔到磁碟中火網路中

import Foundation
class UserModel: NSObject , NSCoding {
    var name:NSString!
    var password:NSString!
    
    //對模型的姓名和密碼屬性進行編碼 並設定對應的key
    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.name, forKey:"name")
        aCoder.encode(self.password, forKey: "password")
    }
    
    //對模型物件進行反序列化
    required init?(coder aDecoder: NSCoder) {
        super.init()
        self.name = aDecoder.decodeObject(forKey: "name") as? NSString
        self.password = aDecoder.decodeObject(forKey: "password") as! NSString
    }
    
    override init() {
        
    }
    
}

在ViewController檢視中

class ViewController: UIViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        let user1 = UserModel()
        user1.name = "jerry"
        user1.password = "123"
        //建立一個可變二進位制物件 用來儲存歸檔的模型物件
        let data = NSMutableData()
        //使資料物件 , 初始化一個鍵值歸檔物件
        let archive = NSKeyedArchiver(forWritingWith: data)
        //對模型物件進行歸檔操作
        //歸檔:是指將物件儲存為一個檔案或者網路上的一個數據塊
        archive.encode(user1, forKey: "user1Key")
        //完成歸檔編碼 即序列化工作
        archive.finishEncoding()
        //初始化一個字串物件,作為歸檔檔案的儲存路徑
        let filePath = NSHomeDirectory()+"/Documents/contacts.data"
        data.write(toFile: filePath, atomically: true)
        
        
        //對歸檔檔案進行載入和恢復歸檔的操作
        //讀取二進位制資料檔案
        let fileData = NSMutableData(contentsOfFile: filePath)
        //對檔案進行恢復歸檔
        //恢復歸檔: 是指將一個來自檔案或網路的歸檔資料塊 恢復成記憶體中的一個swift物件
        let unarchiver = NSKeyedUnarchiver(forReadingWith: fileData! as Data)
        //根據設定的金銘對資料進行恢復歸檔操作。
        let saveUser = unarchiver.decodeObject(forKey: "user1Key") as! UserModel
        unarchiver.finishDecoding()
        
        
        print(saveUser.name)
        print(saveUser.password   )
    }
   
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}