zoukankan      html  css  js  c++  java
  • 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](确保实例变量也能被解码);

          

         

        

  • 相关阅读:
    作业
    动手动脑
    作业
    《大道至简》第二章读后感
    《大道至简》第一章读后感
    局域网内网站发布(三)
    局域网内网站发布(二)
    局域网内网站发布(一)
    管理系统
    台式机没有声音
  • 原文地址:https://www.cnblogs.com/angongIT/p/3719923.html
Copyright © 2011-2022 走看看