Swift中的NSKeyedArchiver使用
2015-09-16 09:20
519 查看
swift利用NSKeyedArchiver归档
extension 是一个分类,分类不允许有存储能力,所以协议方法不能写在分类中
协议中的init(coder decoder: NSCoder)函数会覆盖原始的构造函数,所以类中至少还要有另一个init方法
如果不指定键名,会使用属性名称作为 key,基本数据类型,需要指定 key
//为什么会出现报错呢?
//init(coder decoder:NSCoder){}中解档没有写完.
import UIKit
class CellData:
NSObject {
//cell的标题
var text:String =
""
//cell的勾选属性
var isChecked:Bool
//构造方法
init(text:String,isChecked:Bool){
self.text = text
self.isChecked = isChecked
}
//勾选属性取反方法
func chengedChecked(){
self.isChecked = !isChecked
}
//编码成OBject
func encodeWithCoder(aCoder:NSCoder!){
aCoder.encodeObject(text,forKey:"text")
aCoder.encodeObject(isChecked,forKey:"isChecked")
}
//从NSObject解析回来
required
init(coder aDecoder:NSCoder!){
self.text = aDecoder.decodeObjectForKey("text")
as
String
self.isChecked = aDecoder.decodeObjectForKey("isChecked")
as
Bool
}
}
——————————————存---------------------------
//将数据保存到沙盒的方法
func saveCheckListData(){
var data =
NSMutableData()//创建一个可变的二进制数据
//声明一个归档处理对象
var archiver =
NSKeyedArchiver(forWritingWithMutableData: data)
//将arrayData按对应的CheckListData关键字进行编码
archiver.encodeObject(arrayData,
forKey:
"CheckListData")
//结束编码
archiver.finishEncoding()
//数据写入
data.writeToFile(dataFilePath(),
atomically:
true)
}
——————————————读--------------------
//从沙盒中读取数据
func loadCheckListData(){
//1.获取本地数据文件路径
let path =
self.dataFilePath()
//2.创建文件管理器
let manager =
NSFileManager()
//3.判断文件路径是否存在
if manager.fileExistsAtPath(path){//存在
//4.读取文件
let data =
NSData(contentsOfFile: path)
//5.创建解码器
let unArchiver =
NSKeyedUnarchiver(forReadingWithData: data!)
//6.通过归档时设置的关键字CheckListData来还原arrayData
arrayData = unArchiver.decodeObjectForKey("CheckListData")
as
Array
//7.关闭解码器
unArchiver.finishDecoding()
}else{//找不到本地文件
//没找到创建新的
saveCheckListData()
}
}
Swift实现对象归档时有几个注意点
要继承 NSCoding,实现两个方法extension 是一个分类,分类不允许有存储能力,所以协议方法不能写在分类中
协议中的init(coder decoder: NSCoder)函数会覆盖原始的构造函数,所以类中至少还要有另一个init方法
如果不指定键名,会使用属性名称作为 key,基本数据类型,需要指定 key
class <#className#>: NSObject,NSCoding {
// 至少要有一个 init 方法,否则外部没有办法直接实例化对象
override init() {
}
// 归档方法
func encodeWithCoder(encoder: NSCoder) {
// TODO
}
// 解档方法,会覆盖构造函数
required init(coder decoder: NSCoder) {
// TODO
}
}
//为什么会出现报错呢?
//init(coder decoder:NSCoder){}中解档没有写完.
import UIKit
class CellData:
NSObject {
//cell的标题
var text:String =
""
//cell的勾选属性
var isChecked:Bool
//构造方法
init(text:String,isChecked:Bool){
self.text = text
self.isChecked = isChecked
}
//勾选属性取反方法
func chengedChecked(){
self.isChecked = !isChecked
}
//编码成OBject
func encodeWithCoder(aCoder:NSCoder!){
aCoder.encodeObject(text,forKey:"text")
aCoder.encodeObject(isChecked,forKey:"isChecked")
}
//从NSObject解析回来
required
init(coder aDecoder:NSCoder!){
self.text = aDecoder.decodeObjectForKey("text")
as
String
self.isChecked = aDecoder.decodeObjectForKey("isChecked")
as
Bool
}
}
——————————————存---------------------------
//将数据保存到沙盒的方法
func saveCheckListData(){
var data =
NSMutableData()//创建一个可变的二进制数据
//声明一个归档处理对象
var archiver =
NSKeyedArchiver(forWritingWithMutableData: data)
//将arrayData按对应的CheckListData关键字进行编码
archiver.encodeObject(arrayData,
forKey:
"CheckListData")
//结束编码
archiver.finishEncoding()
//数据写入
data.writeToFile(dataFilePath(),
atomically:
true)
}
——————————————读--------------------
//从沙盒中读取数据
func loadCheckListData(){
//1.获取本地数据文件路径
let path =
self.dataFilePath()
//2.创建文件管理器
let manager =
NSFileManager()
//3.判断文件路径是否存在
if manager.fileExistsAtPath(path){//存在
//4.读取文件
let data =
NSData(contentsOfFile: path)
//5.创建解码器
let unArchiver =
NSKeyedUnarchiver(forReadingWithData: data!)
//6.通过归档时设置的关键字CheckListData来还原arrayData
arrayData = unArchiver.decodeObjectForKey("CheckListData")
as
Array
//7.关闭解码器
unArchiver.finishDecoding()
}else{//找不到本地文件
//没找到创建新的
saveCheckListData()
}
}
相关文章推荐
- Swift中的单例的实现方式
- Swift_基础部分
- Swift 2:可以使用 @NSManage 标记自动生成方法
- Swift 2.0学习笔记(Day 1)——我的第一行Swift代码
- Swift UIScrollView简单介绍
- Swift中自定义SubString
- 【iOS】Swift中扩展extension与协议protocol
- Swift Tutorial(swift 教程) 5:Making it Beautiful
- 关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了
- 关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了
- Swift UITabBarController 标签栏控制器
- Swift高阶函数:Map,Filter,Reduce等-Part 1
- 'String' does not conform to protocol 'CollectionType' Error in Swift 2.0
- swift selector 按钮点击事件
- Swift调用C/C++/OC语言桥接文件命名规则
- 仿QQ左侧抽屉 Swift编写
- Swift - 函数
- swift plist文件
- 如何在 Swift 中使用 CommonCrypto 类进行加密(I)
- Swift短信分享