解档与归档

通过今天学习小小总结下解档归档简单的用法。首先归档分7步。

1.有一个遵守NSCoding协议的复杂对象

2.初始化对象

3.创建NSMutabelData

4,使用NSMData初始化归档NSMData

5.通过工具将对象编译到NSMdata

6.结束编译

7.把NSData写到本地

//解档我分了5部

1.从本地取出归档时的NSData文档

2.用取出来得数据初始化解档工具

3.把反编码的数据负到本身属性上

4,同过初始化一个person类,通过key值接受解档的数据

5.结束反编码




//创建一个Person定义两个属性并遵守NSCoing协议

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCoding>

@property (nonatomic, copy) NSString* name;

@property (nonatomic, copy) NSString* phone;


- (void) encodeWithCoder:(NSCoder *)aCoder;

- (id) initWithCoder:(NSCoder *)aDecoder;



@end




#import "Person.h"

@implementation Person
// 编码(序列化)
- (void) encodeWithCoder:(NSCoder *)aCoder
{// 类里面有多少个属性,就需要对多少个属性进行编码
[aCoder encodeObject:self.name forKey:@"pName"];

[aCoder encodeObject:self.phone forKey:@"pPhone"];

}



//反编码(反序列化)
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"pName"];
self.phone = [aDecoder decodeObjectForKey:@"pPhone"];
}
return self;
}

@end




#import "ViewController.h"
#import "Person.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];



//获取 document文件路径(归档)
NSString *documentStr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

Person *person = [[Person alloc]init];
//复杂对象
person.name = @"张三";
person.phone = @"10086";
NSMutableData *personData = [NSMutableData data];
//创建归档工具
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:personData];
//将person类 编译到persondata里面
[archiver encodeObject:person forKey:@"person"];
//结束编码
[archiver finishEncoding];
NSString *path = [documentStr stringByAppendingString:@"/ person.tex"];
[personData writeToFile:path atomically:YES];



// 解档
//从本地取出归档时的NSData文档
NSData *data = [NSData dataWithContentsOfFile:path];
//用取出来得数据初始化解档工具
NSKeyedUnarchiver *uarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
//通过初始化一个Person类 通过key值接受解档的数据
Person *per = [uarchiver decodeObjectForKey:@"person"];
//结束反编码
[uarchiver finishDecoding];
NSLog(@"%@",per.phone);



}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

以上都是自己总结的如有问题请大神指教!谢谢


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值