美文网首页
iOS 存取数据方式之归档

iOS 存取数据方式之归档

作者: MissZhou_周小小 | 来源:发表于2016-10-08 10:36 被阅读29次

遵循NSCoding协议

NSCoding协议声明了两个方法,这两个方法是一定要实现的。其中一个方法用来说明如何将对象编码到归档中,另一个方法用来说明如何进行解档获取新对象。

1.  遵循协议和设置属性
@interface Student : NSObject<NSCoding>
/* 姓名 */
@property(nonatomic,copy)NSString *name;
/* 年龄 */
@property(nonatomic,assign)NSInteger age;
/* 身高 */
@property(nonatomic,assign)double height;

2. 实现协议方法一(归档,保存数据)
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
    [aCoder encodeDouble:self.height forKey:@"height"];
}
3. 实现协议方法二(解档,读取数据)
- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
        self.height = [aDecoder decodeDoubleForKey:@"height"];
    }
    return self;
}
  • 特别注意
    如果需要归档的类是某个自定义类的子类时,就需要在归档和解档之前先实现父类的归档和解档方法。即 [super encodeWithCoder:aCoder] 和 [super initWithCoder:aDecoder] 方法;

使用

把对象归档是调用NSKeyedArchiver的工厂方法 archiveRootObject: toFile:

    NSString *savePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"student.data"];
    Student *student = [[Student alloc] init];
    student.name = @"lily";
    student.age = 25;
    student.height = 166;
    [NSKeyedArchiver archiveRootObject:student toFile:savePath];

从文件中解档对象就调用NSKeyedUnarchiver的一个工厂方法 unarchiveObjectWithFile:

    NSString *readerPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"student.data"];
    Student *student = [NSKeyedUnarchiver unarchiveObjectWithFile:readerPath];
    if (student) {
        self.informationLable.text = [NSString stringWithFormat:@"该学生的姓名:%@,年龄:%ld,身高:%.2f",student.name,student.age,student.height];
    }

注意

必须遵循并实现NSCoding协议
保存文件的扩展名可以任意指定
继承时必须先调用父类的归档解档方法

具体参考

http://code.cocoachina.com/view/133063

相关文章

  • iOS 存取数据方式之归档

    遵循NSCoding协议 NSCoding协议声明了两个方法,这两个方法是一定要实现的。其中一个方法用来说明如何将...

  • CoreData小记

    iOS应用数据存取的常用方式 XML属性列表 —— Plist NSKeyedArchiver 归档 Prefer...

  • 数据库-SQLite

    一、iOS应用数据存取的常用方式 XML属性列表——PList NSKeyedArchiver归档 Prefere...

  • iOS 应用数据存储之XML(增、删、改)

    iOS应用数据存取的常用方式有如下几种XML属性列表 —— PListNSKeyedArchiver 归档Pref...

  • ios 归档和解归档(利用runtime)

    前言 iOS存取数据的方式有几种,这次项目中存储一些小数据所以用的归档,希望对用归档存储数据的同学有帮助。 iOS...

  • FMDB第三方库的介绍和使用

    首先回顾一下iOS应用数据存取的常用方式? XML属性列表 —— PList NSKeyedArchiver归档 ...

  • iOS数据存取

    iOS数据存取的常见方式: XML属性列表(plist)归档,通常的路径是Documents对象是NSDictio...

  • iOS开发之数据存取

    转自——iOS开发之数据存取

  • iOS数据持久化方式

    iOS数据持久化方式 文件 归档(NSKeyedArchiver) 属性列表(NSUserDefaults) 数据...

  • iOS-12 数据存储

    1iOS数据存储之Core Data(一) - 简书 2iOS数据存储之归档 - 简书 3iOS数据存储之偏好设置...

网友评论

      本文标题:iOS 存取数据方式之归档

      本文链接:https://www.haomeiwen.com/subject/lmofettx.html