归档 NSKeyedArchiver

复杂对象无法象 NSString,NSArray等简单对象一样直接通过 writeToFile 实现持久化,当对复杂对象进行持久化时需要将其转化为 NSData (归档),但获取数据时,将 NSData 转化为复杂对象 (反归档)

下面通过一个简单的 Person 类实现归档和反归档:

1.新建 Peoson 类,有两个属性 name,age,其需要遵守 <NSCoding> 协议,实现- (void)encodeWithCoder: 和 - (instancetype)initWithCoder: 方法

  代码:

  

 1 //
 2 //  Person.m
 3 //  UILesson18_archiver
 4 //
 5 //  Created by Ager on 15/11/5.
 6 //  Copyright © 2015年 Ager. All rights reserved.
 7 //
 8
 9 #import "Person.h"
10
11 @implementation Person
12
13 //对属性做归档处理
14 - (void)encodeWithCoder:(NSCoder *)aCoder{
15
16     [aCoder encodeObject:self.name  forKey:@"name"];
17     [aCoder encodeInteger: self.age forKey:@"age"];
18
19 }
20
21 //反归档处理
22 - (instancetype)initWithCoder:(NSCoder *)aDecoder{
23
24     if (self = [super init]) {
25         self.name = [aDecoder decodeObjectForKey:@"name"];
26         self.age = [aDecoder decodeIntegerForKey:@"age"];
27     }
28     return self;
29 }
30
31 @end

2.完成归档,实现本地存储:(NSKeyedArchiver)

  代码:  

 1 //归档
 2     NSMutableData *data = [NSMutableData data];
 3     NSKeyedArchiver *keyed = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
 4     [keyed encodeObject:per forKey:@"per"];
 5     //结束归档
 6     [keyed finishEncoding];
 7     //归档结束,存数据
 8     NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
 9
10     NSLog(@"%@",cachesPath);
11
12     NSString *newPath = [cachesPath stringByAppendingPathComponent:@"person"];
13     [data writeToFile:newPath atomically:YES];

3.完成反归档,获取复杂对象:(NSKeyedUnarchiver)

  代码:

1     //反归档
2     NSData *data1 = [NSData dataWithContentsOfFile:newPath];
3     NSKeyedUnarchiver *unKeyed = [[NSKeyedUnarchiver alloc]initForReadingWithData:data1];
4
5     Person *per1 = [unKeyed decodeObjectForKey:@"per"];
6     [unKeyed finishDecoding];
7     NSLog(@"%@  %ld",per1.name,per1.age);
时间: 2024-08-10 13:29:44

归档 NSKeyedArchiver的相关文章

IOS数据持久化之归档NSKeyedArchiver

IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等) 下面主要来介绍一个归档NSKeyedArchiver. 归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上:程序运行过程中或者当再次重写打开程序的时候,可以通过解归档(反序列化)还原这些对象. 归档方式: 对Foundation框架中对象进行归档 对自定义的内容进行归档

IOS数据持久化之归档NSKeyedArchiver, NSUserDefaults,writeToFile

//2.文件读写 //支持:NSString, NSArray , NSDictionay, NSData //注:集合(NSArray, NSDictionay)中得元素也必须是这四种类型, 才能够进行文件读写 //string文件读写 NSString *string = @"假如给我有索纳塔"; //Document NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUs

iOS数据持久化存储之归档NSKeyedArchiver

归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),收集了网上的一些资料并结合自己的一些经验,总结如下. 一.使用archiveRootObject进行简单的归档 使用NSKeyedArichiver进行归档.NSKeyedUnarchiver进行接档,这种方式会在写入.读出数据之前对数据进行序列化.反序列化操作. 归档:  //1.获取文件路径 NSString *docPath=[NSSearchPathForDirectoriesInDomai

iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上:程序运行过程中或者当再次重写打开程序的时候,可以通过解归档(反序列化)还原这些对象.本文主要介绍swift实现iOS数据归档. 归档Foundation框架对象 func archiveData(){ var path: AnyObject=NS

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

1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)模拟器应用沙盒的根路径在: (apple是用户名, 8.0是模拟器版本)/Users/apple/Libra

【iOS开发-存储】使用NSCoding归档和反归档

iOS开发中要想存储对象可以使用NSCoding,要想存储的对象必须实验NSCoding协议 比如我们要存储一个Student对象,那么Student类必须遵循NSCoding协议,然后实现NSCoding中得两个方法. @interface Student : NSObject <NSCoding> 然后再.m文件中实现encodeWithCoder:(存)和initWithCoder:(读)方法,这样就告诉了程序这个对象应该怎么存,要存那些属性,以及需要怎么读! /** * 将某个对象写入

沙盒机制 归档 反归档

//文件路径 //1.Home主目录:里面有Document, library,tem,和一个应用程序 NSLog(@"%@",NSHomeDirectory()); //2.Document路径 NSString *docuPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSLog(@"%@",docuPath); //3.Librar

iOS开发数据持久化,归档方法

1.把要显示的数据转换为模型,把对象归档,然后把存起来的对象解析出来就可以使用 2.可以封装起来方便使用,封装的方法存入百度云,需要的可以留言 /** 归档方法 */-(void)archive{    /**      *     常用的几个文件目录   directory目录     * NSDownloadsDirectory 下载文件目录     * NSDocumentDirectory 数据文件目录     * NSCachesDirectory 缓存文件目录     * NSMov

NSKeyedUnarchiver归档

对象归档是指将对象写入文件保存在硬盘上,当再次重新打开程序时,可以还原这些对象.归档也可称为对象序列化,对象持久化 此处以将一个people类进行归档为例 1.在people类中对属性进行序列化.添加<NSCoding> //编码 -(void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; } //解码 -(id)initWithCoder:(NSCod