zoukankan      html  css  js  c++  java
  • 常见应用数据存取之归档

    归档 NSKeyedArchiver

    1、NSKeyedArchiver的基本说明

        如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复

        不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以

        NSCoding协议有2个方法:

    encodeWithCoder:

        每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量

    initWithCoder:

        每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解码实例变量

    2、对系统对象的归档

    // 归档一个NSArray对象到Documents/array.archive

      NSArray *array = [NSArray arrayWithObjects:@”a”,@”b”,nil];

      [NSKeyedArchiver archiveRootObject:array toFile:path];

        

    // 恢复(解码)NSArray对象

      NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

    3、对一般对象的归档

    // NSKeyedArchiver-归档Person对象(Person.h)

        @interface Person : NSObject<NSCoding>

        @property (nonatomic, copy) NSString *name;

        @property (nonatomic, assign) int age;

        @property (nonatomic, assign) float height;

        @end

     // NSKeyedArchiver-归档Person对象(Person.m)

        @implementation Person

        - (void)encodeWithCoder:(NSCoder *)encoder {

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

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

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

        }

        - (id)initWithCoder:(NSCoder *)decoder {

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

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

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

            return self;

        }

        - (void)dealloc {

            [super dealloc];

            [_name release];

        }

        @end

    // NSKeyedArchiver-归档Person对象(编码和解码)

    // 归档(编码)

        Person *person = [[[Person alloc] init] autorelease];

        person.name = @"xxx";

        person.age = 27;

        person.height = 1.83f;

        [NSKeyedArchiver archiveRootObject:person toFile:path];

    // 恢复(解码)

        Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

        

    4、归档注意点

    // NSKeyedArchiver-归档对象的注意

    // 如果父类也遵守了NSCoding协议,请注意:

    // 应该在encodeWithCoder:方法中加上一句

        [super encodeWithCode:encode];

    // 确保继承的实例变量也能被编码,即也能被归档

    // 应该在initWithCoder:方法中加上一句

        self = [super initWithCoder:decoder];

    // 确保继承的实例变量也能被解码,即也能被恢复

  • 相关阅读:
    vue使用elementui合并table
    使用layui框架导出table表为excel
    vue使用elementui框架,导出table表格为excel格式
    前台传数据给后台的几种方式
    uni.app图片同比例缩放
    我的博客
    【C语言】取16进制的每一位
    SharePoint Solution 是如何部署的呢 ???
    无效的数据被用来用作更新列表项 Invalid data has been used to update the list item. The field you are trying to update may be read only.
    SharePoint 判断用户在文件夹上是否有权限的方法
  • 原文地址:https://www.cnblogs.com/MengXY/p/4109546.html
Copyright © 2011-2022 走看看