关闭

IOS数据存储NSKeyedArchiver的使用

标签: ios数据存储数据存储ios数据存储
198人阅读 评论(0) 收藏 举报
分类:

这种方式的存储是采用归档的形式来保存数据。

例:
1.新建一个Student类,给出两个属性:name、age。并要遵守NSCoding协议;

/* Students.h */ 
#import <Foundation/Foundation.h>

@interface Students : NSObject <NSCoding>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSUInteger age;

@end

2. 要实现这两个方法:

/* Students.m */
#import "Students.h"

@implementation Students

- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInteger:_age forKey:@"age"];
}
- (id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
        _name = [aDecoder decodeObjectForKey:@"name"];
        _age = [aDecoder decodeIntegerForKey:@"age"];
    }    
    return self;    
}
@end

3. 在控制器里开始写数据:

/* ViewController.m */
#import "ViewController.h"
#import "Students.h"

@interface ViewController ()
@property (nonatomic, strong) NSMutableDictionary *studentDict; //保存所有student信息的字典
@property (nonatomic, copy) NSString *fullPath; //保存的文件的全路径
@end

@implementation ViewController
/* 懒加载 */
- (NSMutableDictionary *)studentDict{
    if (_studentDict == nil) {
        _studentDict = [NSMutableDictionary dictionary];
    }
    return _studentDict;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    Students *student1 = [[Students alloc] init];
    student1.name = @"张三";
    student1.age = 18;

    Students *student2 = [[Students alloc] init];
    student2.name = @"李四";
    student2.age = 19;

    [self.studentDict setObject:student1 forKey:@"student1"]; 
    [self.studentDict setObject:student2 forKey:@"student2"]; //写数据时必须用self.studentDict(会调用set方法),如果用_studentDict是保存不进去的(get方法不能写数据)

    /* 获取沙盒路径 */
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    /* 生成全路径:给要保存的文件取个别名,并拼接在沙盒路径后面作为全路径 */
    NSString *fullPath = [path stringByAppendingPathComponent:@"stdents.data"];
    /* 保存数据 */
    [NSKeyedArchiver archiveRootObject:_studentDict toFile:fullPath];
    /* 保存全路径 */
    _fullPath = fullPath;
}

/* 点击屏幕,读取数据,打印结果 */
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    /* 读取数据 */
    NSDictionary *dict = [NSDictionary dictionary];
    dict = [NSKeyedUnarchiver unarchiveObjectWithFile:_fullPath];

    Students *p1 = [[Students alloc] init];
    p1 = [dict objectForKey:@"student1"];
    Students *p2 = [[Students alloc] init];
    p2 = [dict objectForKey:@"student2"];

    NSLog(@"sutdent1:姓名:%@--年龄:%ld", p1.name, p1.age);
    NSLog(@"sutdent2:姓名:%@--年龄:%ld", p2.name, p2.age);

}
@end

打印出结果:
这里写图片描述

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iOS开发 - 数据归档与恢复 NSKeyedArchiver

归档与恢复归档归档,英文Archiver[‘ɑrkɪvə],这里指的是将OC的对象存储为一个文件或者网络上的一个数据块。 恢复归档,英文UnArchiver,指的是将一个来自文件或网络的归档数据块恢...
  • wangzi11322
  • wangzi11322
  • 2015-08-20 10:30
  • 2123

iOS NSKeyedArchiver序列化 存储数组对象

@interface ARWGestureModel : NSObject @property(nonatomic,strong)NSString*name; @property(nonatomic,...
  • bobbob32
  • bobbob32
  • 2017-04-07 15:48
  • 838

iOS NSKeyedArchiver序列化后进行数据持久化(swift)

NSKeyedArchiver序列化就我简单理解就是把iOS中的类转换为二进制数据,我们可以方便的把而进制数据存起来。接下来分别以iOS原有的类和自定义的类序列化存储做简单的说明: 使用NSUser...
  • qq_30970529
  • qq_30970529
  • 2016-07-27 14:28
  • 1393

ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)

今天记录一下学习 NSKeyedArchiver、NSKeyedUnarchiver ,主要用在ios数据存储上,数据从内存存储到闪存上,这个过程称为归档。 一、创建一个数据模型(自定义类)...
  • mad1989
  • mad1989
  • 2013-06-16 16:56
  • 26505

数据持久化(三)使用NSKeyedArchiver归档

归档是一个数据持久化的过程,该过程用某种格式来保存一个或多个对象,以便以后还原这些对象。 可以使用NSKeyedArchiver类创建带键(keyed)的文件来完成。在带键的文件中,每个归档的对象对应...
  • u010962810
  • u010962810
  • 2014-02-01 15:25
  • 8125

数据持久化之NSKeyedArchiver

基本的数据类型如NSString、NSDictionary、NSArray、NSData、NSNumber等可以用属性列表的方法持久化到.plist 文件中,但如果是一些自定义的类的话,属性列表的方法...
  • chaoyuan899
  • chaoyuan899
  • 2013-09-22 13:36
  • 19766

IOS-数据存储之NSkeyedArchiver用法

Archiver简单用法: 1.用处很大. 但是用起来 比较麻烦.要从程序设计的时候就 把每一个类实现这个功能 .将内存中的 对象实例保存成 binary 到 磁盘 并且可以 逆向这个过程 用来保存...
  • Axing1991
  • Axing1991
  • 2016-04-11 16:54
  • 364

iOS archive(归档)的总结

归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存。看过了网上的一些归档的资料之后,结合自己的一些经验,总结一下。 本文包括三个方面的知识,1)单个对象的归档 2)多个对象的归档 3...
  • yang8456211
  • yang8456211
  • 2013-11-04 22:44
  • 2284

iOS开发 数据存储之NSKeyedArchiver

NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法.前一个方...
  • wgl_happy
  • wgl_happy
  • 2017-07-25 10:51
  • 98

数据存储—NSKeyedArchiver(二)

上一节已经讲解了如何使用NSKeyedArchiver将自定义的对象保存到文件中。但个人觉得每次保存一个自定义对象到文件中都必须执行如下步骤: 1、遵循 NSCoding 协议 2、实现下面两个方...
  • pkxwyf
  • pkxwyf
  • 2014-12-07 23:19
  • 221
    个人资料
    • 访问:200次
    • 积分:14
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档