其中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. ceph rpm foor rhel6

    ceph-0.86-0.el6.x86_64.rpm 09-Oct-2014 10:00 13M ceph-0.87-0.el6.x86_64.rpm 29-Oct-2014 13:38 13M ce ...

  2. Mvc4.0 提取 Cookie 里的东西

    /// <summary> /// 提取Cookie /// </summary> /// <returns></returns> public sta ...

  3. C#DataTable学习心得

    C#DataTable学习心得 一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(Da ...

  4. CRM odata方法如何使用$top

    odata方法 $top $top1 取1个 ¥top100取100个,放在$select前,中间用&符号隔开. 例如: var activeserviceReq = "/xrmse ...

  5. hadoop 各种组件配置参数

    ********************************************hive*********************************************** hive ...

  6. 漫谈AOP开发之初探AOP及AspectJ的用法

    一.为什么需要AOP技术 AOP 是一个很成熟的技术. 假如项目中有方法A.方法B.方法C……等多个方法, 如果项目需要为方法A.方法B.方法C……这批方法增加具有通用性质的横切处理.   下图可以形 ...

  7. Linux学习之head命令

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...

  8. hadoop笔记之MapReduce的运行流程

    MapReduce的运行流程 MapReduce的运行流程 基本概念: Job&Task:要完成一个作业(Job),就要分成很多个Task,Task又分为MapTask和ReduceTask ...

  9. SAR图像与光学图像区别

    按传感器采用的成像波段分类,光学图像通常是指可见光和部分红外波段传感器获取的影像数据.而SAR传感器基本属于微波频段,波长通常在厘米级.可见光图像通常会包含多个波段的灰度信息,以便于识别目标和分类提取 ...

  10. [问题解决] 程序部署到Linux服务器乱码

    错误: 在windows下开发的eclipse项目需要用java mail发送邮件,在将整个项目部署到linux服务器之后发送的邮件出现了乱码. 发生场景: Linux服务器下的Java mail程序 ...