首先创建一个基本对象模型
添加一个快捷文件
import Foundation
//创建一个基本对象模型
//创建一个继承自NSObject的类,并遵守NSCoding协议,可以被序列化或者反序列化,这样可以归档到磁盘或者分发到网络上
class UserModel: NSObject,NSCoding{
// 为对象模型添加姓名和密码两个属性
var name:NSString!
var password:NSString!
// 添加一个协议方法,用来对模型对象进行序列化操作
func encode(with aCoder: NSCoder) {
// 对模型的姓名和密码属性进行编码操作,并设置对应的键名
aCoder.encode(self.name, forKey: "name")
aCoder.encode(self.password, forKey: "password")
}
// 添加另一个来自协议的方法,用来对模型对象进行反序列化操作
required init?(coder aDecoder: NSCoder) {
super.init()
// 对模型的姓名和属性,根据键名进行解码操作
self.name = aDecoder.decodeObject(forKey:"name") as! NSString
self.password = aDecoder.decodeObject(forKey:"password") as! NSString
}
// 重载父类初始化方法
override init() {
}
}
然后在Viewcontroller.swift文件中进行归档和恢复归档的操作
//使用归档的方法对模型对象进行持久化工作
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 创建一个模型对象,并对其进行归档和恢复归档的操作
// 初始化刚才定义的对象模型
let user1 = UserModel()
// 设置名称,密码属性的值
user1.name = "Jerry"
user1.password = "123"
// 创建一个可变二进制数据对象,用来储存归档后的模型对象
let data = NSMutableData()
// 使数据对象,初始化一个键值归档对象
let archive = NSKeyedArchiver(forWritingWith: data)
// 对模型对象进行归档操作,(归档操作是指将swift对象,存储为一个文件或者网络上的一个数据块)
archive.encode(user1, forKey: "user1Key")
// 完成编码,即序列化工作
archive.finishEncoding()
// 初始化一个字符串对象,作为归档文件的存储路径
let filePath = NSHomeDirectory() + "/Documents/contacts.data"
// 将归档文件存储在程序包的指定位置
data.write(toFile: filePath, atomically: true)
// 对归档文件进行加载和恢复
// 读取刚刚保存的二进制文件
let fileData = NSMutableData(contentsOfFile: filePath)
// 然后对文件恢复归档,将文件或者来自网络的数据块恢复成swift对象
let unarchiver = NSKeyedUnarchiver(forReadingWith: fileData! as Data)
// 根据设置的键名对数据进行恢复归档操作,并获得其最终结果
let saveUser = unarchiver.decodeObject(forKey: "user1Key") as! UserModel
// 完成对象的解码操作
unarchiver.finishDecoding()
print(saveUser.name)
print(saveUser.password)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
补充oc的方法:
//读档
-(void)read:(NSString *)path{
NSString *filePath = path;
// if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
NSString *key = [NSString stringWithFormat:@"last_brt_%d",_grpConf->shortId_];
NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:filePath];
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSMutableDictionary *dic = [unArchiver decodeObjectForKey:key];
[unArchiver finishDecoding];
NSLog(@"readSetting key = %@ brt = %@",key,[dic valueForKey:@"brt"]);
NSString *brtString = [dic valueForKey:@"brt"];
if (brtString) {
float brtFloat = [brtString floatValue];
_colorSelector.slider.value = brtFloat;
CGFloat sliderWidth = kScreen_Width * 0.8 > 300 ? 300 : kScreen_Width * 0.8;
CGFloat x = _colorSelector.slider.value * (sliderWidth - 20);
CGFloat v = _colorSelector.slider.value > 0.05 ? _colorSelector.slider.value : 0.05;
_colorSelector.brLabel.text = [NSString stringWithFormat:@"%.f%%", v * 100];
_colorSelector.brLabel.frame = CGRectMake(x, 0, 36, 16);
}
}
//归档
-(void)save: (CGFloat)brt Path:(NSString *)path {
if (_grpConf) {
NSString *key = [NSString stringWithFormat:@"last_brt_%d",_grpConf->shortId_];
NSMutableDictionary * dic = [[NSMutableDictionary alloc] init];
NSString *str = [NSString stringWithFormat:@"%f", brt];
[dic setValue:str forKey:@"brt"];
NSLog(@"saveSetting key = %@ brt = %@",key,[dic valueForKey:@"brt"]);
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:dic forKey:key];
[archiver finishEncoding];
NSString *filePath = path;
[data writeToFile:filePath atomically:YES];
}
}