Swift - 本地数据的保存与读取(使用NSCoder将对象保存到.plist文件)

Swift - 本地数据的保存与读取(使用NSCoder将对象保存到.plist文件),第1张

概述转自:http://www.voidcn.com/article/p-yozxomkm-bmc.html 下面通过一个例子将联系人数据保存到沙盒的“documents”目录中。(联系人是一个数组集合,内部为自定义对象)。 功能如下: 1,点击“保存”将联系人存入userList.plist文件中 2,点击“读取”从数据文件中加载解析出联系人 注意: 1,本例使用了NSCoder,这个封装了许多技术

转自: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文件)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1074343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存