iOS -使用属性列表序列化简单对象-指定序列化与反序列化的编码格式
使用属性列表序列化简单对象-创建plist表,向plist表添加数据 指定序列化格式化的编码格式(指定一种编码方式,比如xml编码,二进制编码。这样子:(1)把属性列表对象编码为某种格式的nsdata对象(2)将nsdata对象写入文件或是url。反序列化(加载属性列表)的时候,先读取文件或url到nsdata对象,然后在将其解码为原始的属性列表对象)
指定一种编码,把数据写入plist表
if ([fileManager fileExistsAtPath:studentFilePath isDirectory:&isDirectory] && !isDirectory) { NSLog(@"存在 student.plist !!"); }else{ NSLog(@"不存在 student.plist"); NSArray *studentArray = [self createStudentArray];//创建student对象 if ([studentArray writeToFile:studentFilePath atomically:YES]) { NSLog(@"将student数组保存为属性列表文件成功!!"); }else{ NSLog(@"将student数组保存为属性列表文件不成功"); } // 使用kvc构建字段数组 NSArray *studentIDArray = [studentArray valueForKey:@"studentID"]; NSArray *studentNameArray = [studentArray valueForKey:@"studentName"]; NSArray *studentSexArray = [studentArray valueForKey:@"studentSex"]; NSArray *studentImagePathArray = [studentArray valueForKey:@"studentImagePath"]; NSArray *studentList = @[studentNameArray,studentIDArray,studentSexArray,studentImagePathArray]; // 指定序列化格式化的编码格式(指定一种编码方式,比如xml编码,二进制编码。这样子:(1)把属性列表对象编码为某种格式的nsdata对象(2)将nsdata对象写入文件或是url。反序列化(加载属性列表)的时候,先读取文件或url到nsdata对象,然后在将其解码为原始的属性列表对象) NSError *error = nil; //将属性列表对象按照指定编码方式转换为NSData对象 NSData *studentInfoData = [NSPropertyListSerialization dataWithPropertyList:studentList format:NSPropertyListBinaryFormat_v1_0 options:0 error:&error]; //调用NSPropertyListSerialization类的dataWithPropertyList: format:format options:error:方法将属性列表对象编码为指定格式的nsdata对象。NSPropertyListXMLFormat_v1_0是xml编码/NSPropertyListBinaryFormat_v1_0二进制编码。 if (studentInfoData) { // 转换成功 NSLog(@"studentInfoData:\n%s\n",[[studentInfoData description] UTF8String]); //将NSData写入文件 if ([studentInfoData writeToFile:studentFilePath atomically:YES]) { NSLog(@"将student数组保存为属性列表文件成功!"); }else{ NSLog(@"将student数组保存为属性列表文件不成功"); } }else{ NSLog(@"将属性列表对象按照指定编码方式转换为NSData对象失败:\n%s\n",[[error description]UTF8String]); } }
---------------------
反序列化的编码格式:从plist表中读取student对象
if ([fileManager fileExistsAtPath:studentFilePath isDirectory:&isDirectory] && !isDirectory) { NSLog(@"存在 student.plist !!"); //加载属性列表文件到NSData对象 NSData *studentListData = [NSData dataWithContentsOfFile:studentFilePath]; if (studentListData) { //加载为NSData对象成功 NSError *error = nil; //将NSData对象解码为原始属性列表对象 NSArray *studentList = [NSPropertyListSerialization propertyListWithData:studentListData options:0 format:NULL error:&error]; if (studentList) { //将NSData对象解码为原始属性列表对象成功 NSArray *studentName = [studentList objectAtIndex:0]; NSArray *studentID = [studentList objectAtIndex:1]; NSArray *studentSex = [studentList objectAtIndex:2]; NSArray *studentImagePath = [studentList objectAtIndex:3]; NSMutableArray *studentArray = [[NSMutableArray alloc]init]; for (int i = 0; i < [studentName count]; i++) { Students *student = [[Students alloc]initWithName:[studentName objectAtIndex:i] ID:[[studentID objectAtIndex:i] intValue] Sex:[studentSex objectAtIndex:i] Photo:[studentImagePath objectAtIndex:i]]; [studentArray addObject:student]; } NSLog(@"students:\n%s\n",[[studentArray description]UTF8String]); }else { //解码为原始属性列表对象失败 NSLog(@"解码为原始属性列表对象失败:%s",[[error description] UTF8String]); } }else{
打印:
2013-10-28 16:48:24.240 StudentPlist[2387:70b] students:
(
"name:seal,id:110401,易做图:girl,imagepath:seal.png",
"name:willing,id:110402,易做图:boy,imagepath:willing.png",
"name:lisa,id:110403,易做图:girl,imagepath:lisa.png"
)
补充:移动开发 , IOS ,