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

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进行数据的归档和恢复,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。