Archiver简单用法:
1.用处很大. 但是用起来 比较麻烦.要从程序设计的时候就 把每一个类实现这个功能 .将内存中的 对象实例保存成 binary 到 磁盘 并且可以 逆向这个过程 用来保存 用户操作状态.
2.归档操作(NSkeyedArchiver),不同于其他数据存储,它可以把自定义对象存放在文件中。
对于一个应用来说,有唯一的沙盒与之对应,即每个应用不能跨沙盒操作文件。
代码示例:
需要注意的是,需要保存的对象类一定要引用NSCoding协议,并且实现
- (void)encodeWithCoder:(NSCoder *)aCoder
- (id)initWithCoder:(NSCoder *)aDecoder
#pragma mark Demo_3
- (void)saveDataWithArchive{
NSString *documentDirectoy = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject ];
//这里路径可以直接生成 test.archiver 文件,方便查看里面存储的内容暂且保存一个plist去archiver
NSString *path = [documentDirectoy stringByAppendingPathComponent:@"test.plist"];
NSLog(@"Archiver.path---%@",path);
record *tempRecord = [[record alloc]init];
tempRecord.aa = [NSNumber numberWithInt:10];
tempRecord.bb = @"b10_test";
tempRecord.cc = [NSNumber numberWithInt:100];
tempRecord.dd = [NSNumber numberWithInt:1000];
tempRecord.ee = @"e10_test";
[NSKeyedArchiver archiveRootObject:tempRecord toFile:path];
NSLog(@"Archiver 数据已存储.");
}
- (void)readDatafromArchive{
NSString *documentDirectoy = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
//这里路径可以直接生成 test.archiver 文件,方便查看里面存储的内容暂且保存一个plist去archiver
NSString *path = [documentDirectoy stringByAppendingPathComponent:@"test.plist"];
record *tempRecord = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@"aa=%@\n bb=%@\n cc=%@\n dd=%@\n ee=%@",tempRecord.aa,tempRecord.bb,tempRecord.cc,tempRecord.dd,tempRecord.ee);
NSLog(@"Archiver 数据已取出");
}
自定义类:
//
#import "record.h"
@implementation record
#pragma mark - NSCodeing协议方法(一定要实现)
//当进行归档操作的时候就会调用该方法
//在该方法中要写清楚要存储对象的那些属性
- (void) encodeWithCoder:(NSCoder *)aCoder{
NSLog(@"调用了encodeWithCoder方法");
[aCoder encodeObject:_aa forKey:@"aaa"];
[aCoder encodeObject:_bb forKey:@"bbb"];
[aCoder encodeObject:_cc forKey:@"ccc"];
[aCoder encodeObject:_dd forKey:@"ddd"];
[aCoder encodeObject:_ee forKey:@"eee"];
}
//当进行解档操作的时候就会调用该方法
//在该方法中要写清楚要提取对象的哪些属性
- (id)initWithCoder:(NSCoder *)aDecoder{
NSLog(@"调用了initWithCoder方法");
if (self = [super init]) {
self.aa = [aDecoder decodeObjectForKey:@"aaa"];
self.bb = [aDecoder decodeObjectForKey:@"bbb"];
self.cc = [aDecoder decodeObjectForKey:@"ccc"];
self.dd = [aDecoder decodeObjectForKey:@"ddd"];
self.ee = [aDecoder decodeObjectForKey:@"eee"];
}
return self;
}
@end
打印结果:
文件查看:
哈哈,其实也就这么简单!