NSKeyedArchiver是NSCoder的具體子類,提供了一種方法來將對象(和標量值)編碼成與體系結(jié)構(gòu)無關(guān)的格式可以存儲在一個文件中。NSKeyedArchiver可以存儲的數(shù)據(jù)類型包括:NSString蔽豺、NSArray区丑、NSDictionary、NSData修陡。
1沧侥、NSString歸檔與反歸檔
NSString *name = @"李四";
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
path = [path stringByAppendingString:@"string"];
self.filePath = path;
[NSKeyedArchiver archiveRootObject:name toFile:path];
解檔
NSString *string1 = [NSKeyedUnarchiver unarchiveObjectWithFile:self.filePath];
2、NSArray歸檔與反歸檔
NSArray *Array = @[@"1",@"10",@"100"];
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
path = [path stringByAppendingString:@"Array"];
self.filePath = path;
[NSKeyedArchiver archiveRootObject:Array toFile:path];
解檔
NSArray *array1 = [NSKeyedUnarchiver unarchiveObjectWithFile:self.filePath];
3魄鸦、字典歸檔與反歸檔
NSDictionary *dict1 = @{@"name":@"潘鳳",@"age":@"20"};
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
path = [path stringByAppendingString:@"dict"];
self.filePath = path;
[NSKeyedArchiver archiveRootObject:dict1 toFile:path];
解檔
NSDictionary *dict1 = [NSKeyedUnarchiver unarchiveObjectWithFile:self.filePath];
NSLog(@"dict1-------%@",dict1);
4宴杀、自定義歸檔類型
自定義對象需要遵守NSCoding協(xié)議,實現(xiàn)下面2個方法
-(void)encodeWithCoder:(NSCoder *)aCoder
-(id)initWithCoder:(NSCoder *)aDecoder
1号杏、讀取實例變量婴氮,并把這些數(shù)據(jù)寫到NSCoder中去庄岖,即序列化數(shù)據(jù)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.sex forKey:@"sex"];
[aCoder encodeInteger:self.age forKey:@"age"];
[aCoder encodeObject:self.address forKey:@"address"];
}
2铣卡、從NSCoder中讀取數(shù)據(jù)言津,保存到相應(yīng)變量中,即反序列化數(shù)據(jù)
-(id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.sex = [aDecoder decodeObjectForKey:@"sex"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
self.address = [aDecoder decodeObjectForKey:@"address"];
}
return self;
}
舉例說明:
1庭惜、歸檔過程
JFModel *model = [[JFModel alloc]init];
model.name = @"張三";
model.sex = @"男";
model.age = 10;
model.address = @"北京";
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
path = [path stringByAppendingString:@"/model.plist"];
self.filePath = path;
NSLog(@"path------%@",path);
[NSKeyedArchiver archiveRootObject:model toFile:path];
2、反歸檔過程
JFModel *model1 = [NSKeyedUnarchiver unarchiveObjectWithFile:self.filePath];
NSLog(@"姓名:%@---性別:%@---年齡:%ld---住址:%@",model1.name,model1.sex,model1.age,model1.address);