本文介绍Swift2.2 中,创建文件/文件夹,将NSObject对象存档到文件,并从存档文件读取对象.
1:可存档对象声明
//必须要继承NSObject对象,并且实现NSCoding协议class DataBean: NSObject,NSCoding { var image: UIImage? var name: String var rate: Int init?(name: String,rate: Int,image: UIImage?) { self.image = image self.rate = rate self.name = name super.init()//注意 if name.isEmpty || rate < 0 { return nil } } //必须实现的构造方法 required convenIEnce init?(coder aDecoder: NSCoder) { /decode *** 作 let image = aDecoder.decodeObjectForKey(DataKey.imageKey) as! UIImage let name = aDecoder.decodeObjectForKey(DataKey.nameKey) as! String let rate = aDecoder.decodeIntegerForKey(DataKey.rateKey) self.init(name: name,rate: rate,image: image) } //必须实现的encode方法 func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(image,forKey: DataKey.imageKey) aCoder.encodeObject(name,forKey: DataKey.nameKey) aCoder.encodeInteger(rate,forKey: DataKey.rateKey) }}//全局变量Keystruct DataKey { static let imageKey = "image" static let nameKey = "name" static let rateKey = "rate"}
2:存档路径的选择
//文件存档的文件夹,类似: /Users/angcyo/library 这样的路径static var documentDirectory: NSURL { //文件管理对象 let fileManager = NSfileManager.defaultManager() //获取documentationDirectory对应的文件夹,类似/Users/angcyo/library/documentation/ 这样的 //当然,你可以创建自定义的文件夹,或者其他文件夹路径...详情参考api文档说明. let docPath = fileManager.URLsForDirectory(.documentationDirectory,inDomains: .UserDomainMask).first! //如果文件夹不存在,肯定是不行的. 所以...判断一下. if !fileManager.fileExistsAtPath(docPath.path!) { //创建文件夹... try! fileManager.createDirectoryAtPath(docPath.path!,withIntermediateDirectorIEs: true,attributes: nil) } return docPath }//文件存档的文件名 (全路径),文件允许不存在,但是文件所在的文件夹,一定要存在,否则会保存失败.static let DataPathUrl = documentDirectory.URLByAppendingPathComponent("data_bean_s")
3:对象的写入和读取
//数据数组var datas = [DataBean]()// MARK: 保存func saveDataTofile() { let isSuccessSave = NSKeyedArchiver.archiveRootObject(datas,tofile: DataBean.DataPathUrl.path!) if isSuccessSave { print("数据保存成功:\(DataBean.DataPathUrl.path!)") } else { print("数据保存失败:\(DataBean.DataPathUrl.path!)") }}// MARK: 读取func loadDataFromfile() -> [DataBean]? { return NSKeyedUnarchiver.unarchiveObjectWithfile(DataBean.DataPathUrl.path!) as? [DataBean]}
源代码: https://github.com/angcyo/TableViewDemo/tree/NSKeyedArchiver
至此: 文章就结束了,如有疑问: QQ群 AndroID:274306954 Swift:399799363 欢迎您的加入.
总结以上是内存溢出为你收集整理的Swift-->NSKeyedArchiver与NSKeyedUnarchiver数据存档读取(文件)全部内容,希望文章能够帮你解决Swift-->NSKeyedArchiver与NSKeyedUnarchiver数据存档读取(文件)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)