在项目中可能我们需要保存一些数据到plist文件中,以下就本人在学习过程中的笔记,不成熟的地方请指出。
可能我有一个类叫做Student
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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数据的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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()方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2012-07-18 ALV调用的几个标准函数
2012-07-18 简单的ALV显示信息