对象系列化要点
1.数据模型类的创建,并且在数据模型类中实现协议
//序列化所调用的方法
- (void)encodeWithCoder:(NSCoder*)aCoder
{
NSLog(@"-======------1111");
//编码的是该对象的属性
[aCoderencodeObject:self.nameforKey:@"NAME_KEY"];
[aCoderencodeObject:self.numberforKey:@"NUMBER_KEY"];
}
//反序列化所调用的方法
- (id)initWithCoder:(NSCoder*)aDecoder
{
self= [superinit];
if(self) {
NSLog(@"-======------2322222233222");
//解码的也是对象的属性,按照编码时所指定的key进行解码
self.name= [aDecoderdecodeObjectForKey:@"NAME_KEY"];
self.number= [aDecoderdecodeObjectForKey:@"NUMBER_KEY"];
}
returnself;
}
//把该对象存储到本地
//1.创建的一个可变data,将来存放序列化(编码)的数据的
NSMutableData*data = [[NSMutableDataalloc]init];
//创建一个序列化的对象,并且告诉这个对象,序列化后的数据所存放的地方
NSKeyedArchiver*archiver = [[NSKeyedArchiveralloc]initForWritingWithMutableData:data];
//2.开始序列化,并指定一个key
[archiverencodeObject:userforKey:@”USER_KEY”];
//3.结束序列化
[archiverfinishEncoding];
//4.指定一个存储路径
NSString*path = [NSHomeDirectory()stringByAppendingPathComponent:@”Documents/info.plist”];
//存储data
[datawriteToFile:pathatomically:YES];
//5.解决内存问题
[datarelease];
[archiverrelease];
以下为反序列化
//1.去存储的序列化数据
NSString*path = [NSHomeDirectory()stringByAppendingPathComponent:@”Documents/info.plist”];
//判断文件是否存在
if([[NSFileManagerdefaultManager]fileExistsAtPath:path]) {
//获取路径中的data数据
NSData*data = [NSDatadataWithContentsOfFile:path];
//2.告诉反序列化对象,需要解码哪些数据
NSKeyedUnarchiver*unArchiver = [[NSKeyedUnarchiveralloc]initForReadingWithData:data];
//3.根据指定的key取出原来存放的对象
ZYUser*user = [unArchiverdecodeObjectForKey:@"USER_KEY"];
//Class test = NSClassFromString(@"ZYUser");
//4.结束反序列化
[unArchiverfinishDecoding];
//5.解决内存问题
[unArchiverrelease];
self.nameTf.text= user.name;
self.numberTf.text= user.number;
}