其中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. HDU1506_Largest Rectangle in a Histogram

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. vertical-align:middle的居中细节调整

    使用vertical-align:middle可以让行级元素垂直居中,但这个居中是以文字的中线来计算的,而文字的中线在不同的字体上不同,甚至相同的字体在不同的浏览器上显示的都不同.所以直接使用vert ...

  3. 用PS绿化版出现“请卸载并重新安装该产品”的解决方法

    下载了一个CS6版本的绿化版PS,解压后发现用不了,因为是不用安装的,所以这个提示明显是没用的. 我把64位破解文件 amtlib.dll和32位破解文件 amtlib.dll都放进去试了一下,结果行 ...

  4. JavaScript小知识点(一)

     JavaScript 有3种方式定义对象 ①  var i = { function-x:function{ //todo }}; 这是通过Json方式定义一个函数对象. ②  function P ...

  5. SharePoint 2013 WebPart属性面板配置

    为WebPart添加右侧的属性面板,方便将来对于WebPart的配置,我们只需要在CustomWebPart.cs文件里面,声明一下变量即可: private string url = string. ...

  6. OC中的一个特性:延展

    OC中的一个特性:延展其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数,就是有前置性.OC中为了弥补C语言中的这个问题,就 ...

  7. 自定义配置文件的使用(web.config/app.config)

    以下非原创作品,但都是自己看过理解并写过,记录下来,以便之后项目的使用或其它用途. (1)只需要简单配置单一属性值: <configuration> <configSections& ...

  8. 《OS X Mountain Lion》 读书杂记

    OS X是一个类UNIX操作系统,由底层的Darwin和上层的OS X应用程序框架(Cocoa, Carbon, Quartz等)及Aqua用户界面组成.其中Darwin是一个开源.完整的POSIX- ...

  9. perl 打开和关闭文件

    #!/usr/bin/perl -w use strict; #print "please input a string\n"; #my $line = <STDIN> ...

  10. java web项目修改项目名称

    前几天在网上下了个项目,感觉名字长,所以想把项目改名字. 把项目导入到myeclipse中,将项目改名后, 还需要选中项目右键,properties ,修改项目的Context Root的名字.