其中TRPerson为自定义的继承自NSObject的类的子类  其中有两个属性,name 和 age

.h文件

#import

@interface TRPerson : NSObject<</span>NSCoding>

@property (nonatomic,strong)NSString *name;

@property (nonatomic,strong)NSNumber * age;

//初始化方法

- (id)initWithName:(NSString*)name withAge:(NSNumber *)age;

@end

.m文件

#import "TRPerson.h"

@implementation TRPerson

- (id)initWithName:(NSString *)name withAge:(NSNumber *)age{

if (self=[super init]) {

self.age=age;

self.name=name;

}

return  self;

}

#pragma mark - NSCoding

//对属性进行解码(时机:执行encodeObject方法)

- (instancetype)initWithCoder:(NSCoder *)aDecoder{

self= [super init];

if (self) {

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

self.age=[aDecoder decodeObjectForKey:@"age"];

}

return self;

}

//对属性进行编码的方法

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

[aCoder encodeObject:self.age forKey:@"age"];

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

}

- (NSString *)description{

TRPerson *person=[[TRPerson alloc]initWithName:self.name withAge:self.age];

return  [NSString stringWithFormat:@"name:%@ age:%@",person.name ,person.age];

}

@end

ViewController中的viewDidLoad方法中实现数据的归档和解挡

- (void)viewDidLoad {

[super viewDidLoad];

//准备工作

//将自定义的TRPerson对象进行归档(写)

TRPerson *person=[[TRPerson alloc]initWithName:@"张飞" withAge:@20];

//Documents/archiving

NSString *doumentsPath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES).firstObject;

NSString *archiverPath = [doumentsPath stringByAppendingPathComponent:@"archving"];

//1.可变数据类型

NSMutableData *data=[NSMutableData data];

//2.归档对象

NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

//3.编码

[archiver encodeObject:person forKey:@"person"];

//4.编码完成

[archiver finishEncoding];

//5.写入文件

[data writeToFile:archiverPath atomically:YES];

//将自定义的TRPerson对象进行解挡(读)

//1.读取数据

NSData *readingData=[NSData dataWithContentsOfFile:archiverPath];

//2.解码对象

NSKeyedUnarchiver *unArchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:readingData];

//3.解码

TRPerson *personRead=[unArchiver decodeObjectForKey:@"person"];

//4.完成解码

[unArchiver finishDecoding];

//验证

NSLog(@"%@",personRead );

}

数据持久化------Archiving(归档,解档)的更多相关文章

  1. 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver

    在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...

  2. IOS数据存储之归档/解档

    前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...

  3. IOS s数据存储之归档解档

    #import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(no ...

  4. iOS开发中的4种数据持久化方式【一、属性列表与归档解档】

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...

  5. iOS数据持久化存储:归档

    在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...

  6. iOS 浅复制、深复制、完全复制的知识点梳理验证(附加归档解档)

    在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值 ...

  7. 归档 & 解档

    代码实现 遵守协议 class AccessToken: NSObject, NSCoding 实现协议方法 // MARK: - 归档&解档 required init(coder aDec ...

  8. iOS 浅赋值、深复制、全然复制的知识点梳理验证(附加归档解档)

    写于前: 在之前转载的一片文章中.文中对浅复制和深复制进行了具体的解读,同一时候还提到了深复制(one-level-deep copy).全然复制(true copy)的概念,并指出iOS开发中的深复 ...

  9. iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

    1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...

随机推荐

  1. php set env

    SYSTEM WARNING: 'date_default_timezone_get(): It is not safe to rely on the system's timezone settin ...

  2. #include <sstream>

    1 std::istringstream 2 std::stringstream 1 std::istringstream input 1 在一个字符串string里提取部分数据,这些数据以空格' ' ...

  3. JavaScript 工作必知(九)function 说起 闭包问题

    大纲 Function Caller 返回函数调用者 Callee 调用自身 作用域 闭包 function 函数格式 function getPrototyNames(o,/*optional*/ ...

  4. NET 人民币大写

    /***** HongShijin** Me@HongShijin.com** 2009-3-15 10:13:00.00000** text/C#***/ /// <summary> / ...

  5. table+js实现网站左侧列表下拉隐藏

    <script language="javascript">                    function showHide(obj){            ...

  6. ie8不兼容input的placeholder属性但是要实现其效果的方法

    通过学习前辈的思想,个人想法整理如下: 通过两个元素标签,仿造出placeholder的内容 使用position定位好两个元素标签 第一要隐藏两个元素标签display:none,在<!--[ ...

  7. EF 6.0使用小计

    ---恢复内容开始--- 最近尝试了下EF Extended,但是居然需要EF6.0以上,没办法,只能安装了,打开解决方案,选择库程序包管理下的程序包管理控制台(或者直接右击你需要使用扩展的解决方案选 ...

  8. html系列教程--center dl dt dd div

    <center> 标签:对其所包括的文本进行水平居中. <datalist> 标签:定义列表,与 input 元素配合使用该元素,来定义 input 可能的值 demo: &l ...

  9. Android 开源库

    http://www.cnblogs.com/hawkon/p/3593709.html

  10. 摩根斯坦利 - 2016年09月8日 面试题 - HashMap

    摩根斯坦利 - 2016年09月8日 面试题: 给定一个 Map<Person, Object> map = new HashMap<Person, Object>(); 放入 ...