iOS---归档与解档

/*
iOS归档小结:
1.归档实际上就是一种文件保存的形式,几乎所有的对象都能够被归档存储。它使用NSKeyedArchiver进行归档(归档的数据为:二进制数据)、NSKeyedUnarchiver进行解档,它会在写入、读出数据(二进制数据)之前对数据进行序列化、反序列化操作。

 2.另外也需要介绍一下:NScoder 和 NScoding,NScoder 和 NScoding有将自己定义的类的对象写入磁盘的作用,-(id)initWithCoder:(NSCoder )coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据
 -(void)encodeWithCoder:(NSCoder )coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据
 NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。
    */

/*
单一对象的归档

NSString* path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)firstObject];//缓存路径
NSString* archivePath = [path stringByAppendingPathComponent:@"archive.plist"];
NSLog(@"%@",archivePath);
NSArray* arrMut =@[@{@"asd":@"12",@"asd1":@"12",@"asd2":@"12"},@{@"asd2":@"12"}];
//归档--序列化
[NSKeyedArchiver archiveRootObject:arrMut toFile:archivePath];

NSArray* unArr = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];//解档---反序列化
NSLog(@"%@",unArr);

*/

/*多个对象的归档*/
NSString* path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)firstObject];//缓存路径
 NSString* archivePath = [path stringByAppendingPathComponent:@"archive.plist"];
NSLog(@"%@",archivePath);
//归档
NSMutableData* data = [[NSMutableData alloc]init];
NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
//对多个对象归档
[archiver encodeBool:YES forKey:@"isOr"];
[archiver encodeFloat:12.356 forKey:@"floatwe"];
[archiver finishEncoding];
[data writeToFile:archivePath atomically:YES];


//解档
NSMutableData* data1 = [[NSMutableData alloc]initWithContentsOfFile:archivePath];
NSKeyedUnarchiver* unarchive = [[NSKeyedUnarchiver alloc]initForReadingWithData:data1];
BOOL iOS = [unarchive decodeBoolForKey:@"isOr"];
float floatwe = [unarchive decodeFloatForKey:@"floatwe"];
[unarchive finishDecoding];
NSLog(@"%d %f",iOS,float);

-------------------归档和解档结合Model实现-----------------------------

import <Foundation/Foundation.h>

@interface Worker : NSObject<NSCoding>

@property (nonatomic,strong) NSString* name;//姓名
@property (nonatomic,assign) NSString* age;//年龄
@property (nonatomic,strong) NSString* workType;//职业
@property (nonatomic,assign) NSString* wage;//工资
@property (nonatomic,assign) NSString* workTime;//工作年限

@property (nonatomic,strong) NSDictionary* dict;

  • (instancetype)initWithDict:(NSDictionary *)dic;

@end


import "Worker.h"

@implementation Worker

  • (instancetype)initWithDict:(NSDictionary *)dic{

// self = [super init];
if ( self = [super init]) {

    self.dict = dic;
}
return self;

}

  • (void)setDict:(NSDictionary *)dict{
    self.name = [dict objectForKey:@"name"];
    self.age = [dict objectForKey:@"age"] ;
    self.workType = [dict objectForKey:@"workType"];
    self.wage = [dict objectForKey:@"wage"] ;
    self.workTime = [dict objectForKey:@"workTime"];

}

  • (void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.age forKey:@"age"];
    [aCoder encodeObject:self.workType forKey:@"workType"];
    [aCoder encodeObject:self.wage forKey:@"wage"];
    [aCoder encodeObject:self.workTime forKey:@"workTime"];
    }

  • (id)initWithCoder:(NSCoder *)aDecoder{

    self = [super init];
    if (self) {
    self.name = [aDecoder decodeObjectForKey:@"name"];
    self.age = [aDecoder decodeObjectForKey:@"age"];
    self.workType = [aDecoder decodeObjectForKey:@"workType"];
    self.wage = [aDecoder decodeObjectForKey:@"wage"];
    self.workTime = [aDecoder decodeObjectForKey:@"workTime"];
    }
    return self;
    }

@end

具体用法:
NSDictionary* dict = @{@"name":@"zxc",@"age":@"5",@"workType":@"iOS",@"wage":@"50",@"workTime":@"2"};
Worker* work = [[Worker alloc]initWithDict:dict];
NSString* path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)firstObject];//缓存路径

NSString* archivePath = [path stringByAppendingPathComponent:@"worker.plist"];
NSLog(@"%@",archivePath);
if ([NSKeyedArchiver archiveRootObject:work toFile:archivePath]) {
    
    Worker* worker = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
    NSLog(@"%@ %@ %@ %@ %@",worker.age,worker.name,worker.workTime,worker.workType,worker.wage);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 一、归档的基本概念 之前将数据保存本地,只能是字符串、数组、字典、NSNuber、BOOL等容器类对象对象,不能将...
    空白Null阅读 5,165评论 1 10
  • iOS 開発の結構 画面 UI UIWebview [[UIApplication sharedApplicati...
    RencaiXiong阅读 556评论 0 0
  • 归档与反归档 复杂对象就是在Foundation框架内不存在的数据类,例如我们自定义的Person类。 复杂对象无...
    Joker_King阅读 2,822评论 4 4
  • “别让孩子输在起跑线上”,这句耳熟能详的话如今高频率的挂在我们周边家长嘴上,但是在你盲目的把这一观点施加到孩子身上...
    自强不息的老油条阅读 366评论 0 0
  • 那时,独居乡间一个斗室 每个秋天的夜晚,总有 一树桂影婆娑窗前 一丛桐叶,摇曳着一地月光 斗室里,没有家具 没有音...
    甘树林阅读 947评论 8 4