转自:http://www.jb51.cc/article/p-yozxomkm-bmc.html
下面通过一个例子将联系人数据保存到沙盒的“documents”目录中。(联系人是一个数组集合,内部为自定义对象)。
功能如下:
1,点击“保存”将联系人存入userList.pList文件中
2,点击“读取”从数据文件中加载解析出联系人
注意:
1,本例使用了NSCoder,这个封装了许多技术细节,使用它我们可以很轻易的将对象写到文件中,也可以用它将文件中的对象转换回来。
2,自定义对象必须添加如下两个方法,这个才能顺利的被序列化编码存储和读取。
//从nsobject解析回来init(coder aDecoder:NSCoder!){ self.name=aDecoder.decodeObjectForKey("name") as String self.phone=aDecoder.decodeObjectForKey("Phone") as String}//编码成objectfunc encodeWithCoder(aCoder:NSCoder!){ aCoder.encodeObject(name,forKey:"name") aCoder.encodeObject(phone,forKey:"Phone")}
具体代码如下:
— VIEwController.swift —
import UIKitclass VIEwController: UIVIEwController { var dataModel = DataModel() overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() // Do any additional setup after loading the vIEw,typically from a nib. //初始化模拟数据 onCreateData() } //创建模拟数据 func onCreateData(){ dataModel.userList.append(UserInfo(name: "张三",phone: "1234")) dataModel.userList.append(UserInfo(name: "李四",phone: "1212")) dataModel.userList.append(UserInfo(name: "航歌",phone: "3525")) } //保存数据 @IBAction func saveData(sender:AnyObject) { dataModel.saveData() } //读取数据 @IBAction func loadData(sender:AnyObject) { dataModel.loadData() } overrIDe func dIDReceiveMemoryWarning() { super.dIDReceiveMemoryWarning() // dispose of any resources that can be recreated. }}
— DataModel.swift —
import UIKitclass DataModel: NSObject { var userList = [UserInfo]() overrIDe init(){ super.init() println("沙盒文件夹路径:\(documentsDirectory())") println("数据文件路径:\(datafilePath())") } //保存数据 func saveData() { let data = NSMutableData() //申明一个归档处理对象 let archiver = NSKeyedArchiver(forWritingWithMutableData: data) //将Lists以对应CheckList关键字进行编码 archiver.encodeObject(userList,forKey: "userList") //编码结束 archiver.finishEnCoding() //数据写入 data.writetofile(datafilePath(),atomically: true) } //读取数据 func loadData() { //获取本地数据文件地址 let path = self.datafilePath() //声明文件管理器 let defaultManager = NSfileManager() //通过文件地址判断数据文件是否存在 if defaultManager.fileExistsAtPath(path) { //读取文件数据 let data = NSData(contentsOffile: path) //解码器 let unarchiver = NSKeyedUnarchiver(forReadingWithData: data!) //通过归档时设置的关键字CheckList还原Lists userList = unarchiver.decodeObjectForKey("userList") as Array //结束解码 unarchiver.finishDeCoding() } } //获取沙盒文件夹路径 func documentsDirectory()->String { let paths = NSSearchPathForDirectorIEsInDomains( NSSearchPathDirectory.documentationDirectory,NSSearchPathDomainMask.UserDomainMask,true) let documentsDirectory:String = paths.first as String return documentsDirectory } //获取数据文件地址 func datafilePath ()->String{ return self.documentsDirectory().stringByAppendingString("userList.pList") }}
— UserInfo.swift —
import UIKitclass UserInfo: NSObject { var name:String var phone:String //构造方法 init(name:String="",phone:String=""){ self.name = name self.phone = phone super.init() } //从nsobject解析回来 init(coder aDecoder:NSCoder!){ self.name=aDecoder.decodeObjectForKey("name") as! String self.phone=aDecoder.decodeObjectForKey("Phone") as! String } //编码成object func encodeWithCoder(aCoder:NSCoder!){ aCoder.encodeObject(name,forKey:"name") aCoder.encodeObject(phone,forKey:"Phone") }}总结
以上是内存溢出为你收集整理的Swift - 本地数据的保存与读取(使用NSCoder将对象保存到.plist文件)全部内容,希望文章能够帮你解决Swift - 本地数据的保存与读取(使用NSCoder将对象保存到.plist文件)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)