通过今天学习小小总结下解档归档简单的用法。首先归档分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
以上都是自己总结的如有问题请大神指教!谢谢