在项目中可能我们需要保存一些数据到plist文件中,以下就本人在学习过程中的笔记,不成熟的地方请指出。

可能我有一个类叫做Student

import UIKit

class Student: NSObject {
    var text:String
    var age:Bool
    init(text:String,age:Int) {
        self.text = text
        self.age = age
    }
    
    //从nsobject中解析回来
    init(coder aDecoder:NSCoder){
        self.text = aDecoder.decodeObjectForKey("Text") as! String
        self.age = aDecoder.decodeObjectForKey("Age") as! Int
    }
    
    //编码成object
    func encodeWithCoder(aCoder:NSCoder){
        aCoder.encodeObject(text, forKey: "Text")
        aCoder.encodeObject(checked, forKey: "Age")
    }
    
}

 encodeWithCoder方法中,每一个属性设置为一个关键字,用于序列化编码,以便我们在init(coder aDecoder:NSCoder)中解析回来

以下是两个保存用加载plist数据的方法

var students:[Student] = [Student]()
func loadStudentsData() {
        let path = self.dataFilePath()
        //声明文件管理器
        let defaultManager = NSFileManager()
        if defaultManager.fileExistsAtPath(path) {
            let data = NSData(contentsOfFile: path)
            //解码器
            let archive = NSKeyedUnarchiver(forReadingWithData: data!)
            students = archive.decodeObjectForKey("Students") as! Array
            //结束解码
            archive.finishDecoding()
        } else {
          saveStudentsData()
        }
    }
    
    func saveStudentsData() {
        var data = NSMutableData()
        //聲明一個歸檔處理對象
        var archive = NSKeyedArchiver(forWritingWithMutableData: data)
        //將arrData進行編碼
        archive.encodeObject(students, forKey: "Students")
        archive.finishEncoding()
        //數據寫入
        data.writeToFile(dataFilePath(), atomically: true)
    }

 在UI启动的时候加入loadStudentsData()方法,每次有改变students数组的时候调用saveStudentsData()方法