iOS -使用属性列表序列化简略对象-指定序列化与反序列化的编码格式

iOS -使用属性列表序列化简单对象-指定序列化与反序列化的编码格式

 接上一文:  点击打开链接   使用属性列表序列化简单对象-创建plist表,向plist表添加数据

 指定序列化格式化的编码格式(指定一种编码方式,比如xml编码,二进制编码。这样子:(1)把属性列表对象编码为某种格式的nsdata对象(2)将nsdata对象写入文件或是url。反序列化(加载属性列表)的时候,先读取文件或urlnsdata对象,然后在将其解码为原始的属性列表对象)


指定一种编码,把数据写入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,sex:girl,imagepath:seal.png",

    "name:willing,id:110402,sex:boy,imagepath:willing.png",

    "name:lisa,id:110403,sex:girl,imagepath:lisa.png"

)