//简单对象可以通过直接写入文件的方式进行存储,复杂对象我们无法直接写入文件,这个时候需要借助归档和反归档
//归档和反归档并不是数据持久化的方式,而是将复杂对象转化成简单对象的一种方式
Person * per = [Person new];
per.name = @"欧阳冰"; per.gender = @"神秘"; per.hobby = @"美女"; per.age = @"21"; //准备一个路径 NSString * path = NSHomeDirectory(); path = [path stringByAppendingString:@"/曹江涛.avi"]; NSLog(@"%@",path); //创建数据对象,用来存放person NSMutableData * data = [NSMutableData data]; //创建归档对象 NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; //归档 [archiver encodeObject:per forKey:@"secret"]; //完成归档 [archiver finishEncoding]; //写入文件(writeToFile) [data writeToFile:path atomically:YES]; //反归档 NSData * _data = [NSData dataWithContentsOfFile:path]; //创建反归档对象 NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:_data]; //反归档数据 Person * per1 = [unarchiver decodeObjectForKey:@"secret"]; //反归档完成 [unarchiver finishDecoding]; NSLog(@"%@",per1.name);方法二:不用OC封装好的方法,序列化写入
将复杂对象序列化:
eg.将UserListsetNode *node,类型的对象写入文件。
#import@interface UserListsetNode : NSObject //序列化{@public NSString* m_pstrInfo;//如果服务器异常这边就是错误信息 NSArray *m_pUsersArray; NSMutableDictionary *m_pUserSetDic; NSString *m_pstrTime;}+(NSData*)Request:(NSString*)pstrToken ToId:(NSString*)pstrToId;-(BOOL) DecodeJson:(NSData*)pData;@end
#import "UserListsetNode.h"@implementation UserListsetNode+(NSData*)Request:(NSString *)pstrToken ToId:(NSString*)pstrToId{ NSString *pstrUrl = [NSString stringWithFormat:@"%@%@",BASEURL,@"user/listset/"]; NSString *pstrData = [NSString stringWithFormat:@"{\"token\":\"%@\",\"toid\":\"%@\"}",pstrToken,pstrToId]; return [HttpUtil Request:pstrUrl data:pstrData];}-(BOOL)DecodeJson:(NSData *)pData{ m_pstrInfo = @""; if (nil == pData) { return NO; } NSError *pError; NSDictionary *pRetDic = [NSJSONSerialization JSONObjectWithData:pData options:NSJSONReadingMutableContainers error:&pError]; if (nil == pRetDic) { return NO; } if ([[pRetDic objectForKey:@"status"] integerValue] == 0) { m_pstrInfo = [pRetDic objectForKey:@"info"]; return NO; }else{ NSArray *pArray = [[NSArray alloc]init]; if(nil == m_pUserSetDic) { m_pUserSetDic = [[NSMutableDictionary alloc]init]; } pArray = [pRetDic objectForKey:@"users"]; for (NSDictionary *pDic in pArray) { for (int i =0; i
使用时:
-(void)SetUserSettings:(UserListsetNode *)pUserSet{ if ([CommonUtil FileExist:DIR_USERLISTSET]) { //将序列化的对象写入文件 [NSKeyedArchiver archiveRootObject:pUserSet toFile:DIR_USERLISTSET]; [self GetUserSettings]; }else{ [[NSFileManager defaultManager]createFileAtPath:DIR_USERLISTSET contents:nil attributes:nil]; [self SetUserSettings:pUserSet]; }}