iOS 解归档

什么是归档呢?

归档原名叫 Archiver[‘ɑ:kaiv] ,可以理解为将数据以序列化的方式存储到本地,像是将文件放入文件夹中一样,进行资料的归档存放。其实相关类名为NSKeyedArchiver,keyed在这里可以理解为为归档的数据赋上了键的意思,就像给文件村当时要有对照的文件名。
针对归档对象的多少我们可以将归档分为单个对象归档和多个对象统一归档。

归档单个对象步骤:

a、创建文件目录
b、对文件进行归档Archiver
c、对文件进行解归档unArchiver

 // 归档单个对象-----------------------
    NSString *homeDirectory = NSHomeDirectory();// 根目录
    NSString *demoPath = [homeDirectory stringByAppendingPathComponent:@"demo.archiver"];// 添加存储的文件名
    BOOL flag = [NSKeyedArchiver archiveRootObject:@"Cloudox" toFile:demoPath];// 归档一个字符串,并返回成功与否的标记

    if (flag) NSLog(@"归档成功");

    NSLog(@"解档后为:%@", [NSKeyedUnarchiver unarchiveObjectWithFile:demoPath]);

归档多个对象的步骤:

a、创建文件目录
b、设置存储多个对象的容器NSMutableData
c、开始对对象进行归档Archiver,然后结束对多个对象的归档finishEncoding。
d、将对象容器写到文件中

    NSString *name = @"张三";
    NSInteger age = 27;
    //路径
    NSString *multiPath = [homeDirectory stringByAppendingPathComponent:@"multi.archiver"];
    //存储多个对象的容器
    NSMutableData *multiData = [[NSMutableData alloc] init];

    NSKeyedArchiver *multiArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:multiData];
    [multiArchiver encodeObject:name forKey:@"name"];
    [multiArchiver encodeInteger:age forKey:@"age"];
    [multiArchiver finishEncoding];// 结束对多个对象的归档
    [multiData writeToFile:multiPath atomically:YES];

e、解档是将前三个步骤反着来:
1、创建一个解挡容器,同时取出存储归档的数据。
2、解档容器放到multiUnarchiver中。
3、取出相应的归档数据。
4、结束解档。

 // 解档
    //存储解档后多个对象的容器
    NSMutableData *unMultiData = [[NSMutableData alloc] initWithContentsOfFile:multiPath];
    NSKeyedUnarchiver *multiUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:unMultiData];
    NSString *unName = [multiUnarchiver decodeObjectForKey:@"name"];
    NSInteger unAge = [multiUnarchiver decodeIntegerForKey:@"age"];
    [multiUnarchiver finishDecoding];// 结束对多个对象的解档
    NSLog(@"多对象解档后为:%@的年龄为%ld", unName, unAge);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值