其中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. Linux系统下安装phpmyadmin方法

    phpmyadmin下载地址:不要分,赶紧去下载吧!http://download.csdn.net/detail/u011986449/7429799 1.找到 /libraries/config. ...

  2. IOS 8弃用api

    IOS 8弃用api 下面api是弃用: 的 UIApplication 方法和属性注冊通知. 使用新的API. 的 uiviewcontroller 面向接口的方法和属性. 中描写叙述的特征和大小类 ...

  3. 高性能 TCP &amp; UDP 通信框架 HP-Socket v3.2.3 正式宣布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件.广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  4. C#核编之一个简单的C#程序

    构建一个简单的C#应用程序需要注意一下几点: 1.C#要求所有的程序逻辑都包含在一个类型定义中       --->这里的类型指的是(类,接口,结构,枚举,委托中的一个或多个) 2.与其他语言不 ...

  5. html系列教程--DOCTYPE a area

    <!DOCTYPE>标签:<!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令.在 HTML 4.01 中,& ...

  6. 第一章ASP.NET SignalR简介

    第一章ASP.NET SignalR简介 1.1概述: ASP.NET SignalR是微软新开发的类库,为的是帮助ASP.NET开发人员很方便地开发实时网络功能. SignalR允许服务器端和客户端 ...

  7. Android常见布局问题

    原文链接:http://www.cnblogs.com/Birdmafly/p/3809802.html 好久没写博了,因为最近在忙着做一个app,实在是没有时间.现在快完工了.想着还是把这个布局问题 ...

  8. 关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器

    这篇文章主要介绍了关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器,需要的朋友可以参考下.希望对大家有所帮助   Firefox 和 IE 的浏览器各自实现了input历史记录的功能 ...

  9. OpenID倡议:别再创建新的用户名和密码

    原文作者:Jeff Atwood 随着Stack Overflow开发工作的逐步深入,我们不可回避地碰到了这个问题:我们需要让用户登录,即使网络上用户名/密码已经泛滥成灾,我们也只能随波逐流.我已经有 ...

  10. Android Every day a new function:two

    分享功能: 效果图: 代码(分享TEXT,视频或者图片设置type即可): @Override protected void onCreate(Bundle savedInstanceState) { ...