码迷,mamicode.com
首页 > 移动开发 > 详细

IOS中利用NSKeyedArchiver进行数据的归档和恢复

时间:2014-05-10 06:55:44      阅读:400      评论:0      收藏:0      [点我收藏+]

标签:style   code   color   c   int   com   

1、相关知识点:

    <1> 可以利用NSKeyedArchiver 进行归档和恢复的对象类型:NSString 、NSDictionary、NSArray、NSData、                              NSNumber等

    <2> 使用是必须遵循NSCoding协议对象,实现两个方法:

            encodeWithCoder:归档对象时,将会调用该方法。

            initWithCoder:每次从文件中恢复对象时,调用该方法。

2、简单例子阐述详细步骤

    <1> 创建一个学生对像HUStudent,遵循 NSCoding 协议,并给学生对像规定三个属性:

            @property (nonatomic, copy) NSString *name;

            @property (nonatomic, assign) double height;

            @property (nonatomic, assign) int age;

    <2> 利用第一个方法进行数据的存储:需要说明需要存储的属性

           - (void)encodeWithCoder:(NSCoder *)encoder

        {

           [encoder encodeObject:self.name forKey:@"name"];

           [encoder encodeInt:self.age forKey:@"age"];

           [encoder encodeDouble:self.height forKey:@"height"];

        }

    <3> 利用第二个方法解析对象:读取对象属性

           - (id)initWithCoder:(NSCoder *)decoder

         {

             if(self = [super init])

               { 

                   self.name = [decoder   decoderObjectForKey:@"name"];

                   self.age = [decoder  decoderObjctForKey:@"age"];

                   self.height = [decoder  decoderObjectForKey:@"height"];

               }

           return self;

          }

    <4> 在控制器中对模型对象进行赋值与读取

            >>模型对象的属性赋值

                 //----1.新的模型对象

                HUStudent * student = [[HUStudent  alloc]init];

                student.name = @"hulin";

                student.age = 24;

                student.height = 1.83;

               // -----2.归档模型对象

                NSString * doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)                               lastObject]; // 获得Documents全路径

                NSString * path = [doc stringByAppendingPathComponent:@"student.plist"]; // 获取文件的全路径

              NSArray * array = @[student];

                [NSKeyedArchiver  archiveRootObject:array  toFile:path]; // 将对象归档

               //----- 3.读取模型对象的属性

                NSString * doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject]; // 获得     Documents全路径

                NSString * path = [doc stringByAppendingPathComponent:@"student.plist"];   // 获得文件的全路进

                HUStudent * student = [NSKeyedUnarchiver  unarchiveObjectWithFile:path];  // 从文件中读取对象

                NSLog(@"%@,%d,%f",student.name,student.age,student.height);          

 

 3、使用NSKeyedArchiver存储数据注意事项:

      如果程序中创建的子类和父类都遵循了NSCoding协议,要在encodeWithCoder:方法中加上[self encodeWithCode:encode](确保继承的实例变量也能被    编码);同样在 initWithCoder:加上 self = [super initWithCoder:decoder](确保实例变量也能被解码);

      

     

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IOS中利用NSKeyedArchiver进行数据的归档和恢复,布布扣,bubuko.com

IOS中利用NSKeyedArchiver进行数据的归档和恢复

标签:style   code   color   c   int   com   

原文地址:http://www.cnblogs.com/angongIT/p/3719923.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!