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
打印結果:
文件查看:
哈哈,其實也就這麼簡單!