iOS阶段学习第18天笔记(Plist-Archiver-归档与解归档操作)
iOS学习(OC语言)知识点整理
一、归档与解归档的操作
1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取
将数据对象归档成plist文件
2)plist文件中只能存放:NSString、NSDate、NSNumber、Bool、NSData、NSArray、NSDictionary
并且NSArray和NSDictionary中只能是以上的类型
3)归档存放时数据是什么类型,读取数据时就用什么类型的数据接收。
4)归档不能直接操作自定义对象类型的数据。
5)归档与解归档操作实例代码 :
//创建一个二维数组(数组中每个元素又是一个数组对象)
NSMutableArray *array1=[[NSMutableArray alloc]init];
for(int i=;i<;i++){
[array1 addObject:[NSString stringWithFormat:@"str%d",i+]];
} NSMutableArray *array2=[[NSMutableArray alloc]init];
for(int i=;i<;i++){
[array2 addObject:[NSNumber numberWithInt:arc4random()%]];
} NSArray *bigArray=@[array1,array2];
//将数组对象写入文件,(先写入内存中,如果写入成功,马上存入文件)
[bigArray writeToFile:@"/Users/kingkong/Desktop/day08/array.plist" atomically:YES]; //将plist文件的内容直接读取出存入数组
NSArray *newArray=[[NSArray alloc]initWithContentsOfFile:@"/Users/kingkong/Desktop/day08/array.plist"];
NSLog(@"%@",newArray); NSArray *emails=@[@"zhangsan@163.com",@"zhangsan@qq.com"];
//创建一个字典对象
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"name",@"",@"password",emails,@"email", nil];
//将字典对象写入文件
[dict writeToFile:@"/Users/kingkong/Desktop/day08/dict.plist" atomically:YES]; //将plist文件的内如读取出来存入字典
NSDictionary *newDict=[NSDictionary dictionaryWithContentsOfFile:@"/Users/kingkong/Desktop/day08/dict.plist"];
NSLog(@"%@",newDict);
6)归档与解归档自定义类数据 实例代码:
1、定义一个Birthday类,在.h文件中遵守NSCoding 协议 例如:
@interface Birthday : NSObject<NSCoding>
//出生日期类,年、月、日
@property(nonatomic,assign)int year;
@property(nonatomic,assign)int month;
@property(nonatomic,assign)int day;
@end
2、在.m文件中实现NSCoding协议方法 例如:
#import "Birthday.h"
@implementation Birthday
//在归档时自动调用这个方法,将所有的成员变量编码(给成员变量设置相应的键)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeInt:_year forKey:@"year"];
[aCoder encodeInt:_month forKey:@"month"];
[aCoder encodeInt:_day forKey:@"day"];
} -(id)initWithCoder:(NSCoder *)aDecoder
{
if(self=[super init]){
_year=[aDecoder decodeIntForKey:@"year"];
_month=[aDecoder decodeIntForKey:@"month"];
_day=[aDecoder decodeIntForKey:@"day"];
}
return self;
}
@end
3、在 main 文件中执行归档与解归档方法 例如:
Birthday *b=[[Birthday alloc]init];
b.year=;
b.month=;
b.day=; //b必须遵守归档协议
NSString *path=@"/Users/kingkong/Desktop/day09/Birthday.data";
//执行归档操作
BOOL ret=[NSKeyedArchiver archiveRootObject:b toFile:path];
if(ret){
//执行解归档操作
Birthday *b2=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@"year:%i",b2.year);
}
7)将多个对象归档到一个文件中 实例代码
1、定义一个Person类 在.h文件中遵守NSCoding协议 例如:
#import <Foundation/Foundation.h>
//如果要对对象进行归档,必须遵守归档协议,实现协议中规范的方法
@interface Person : NSObject<NSCoding>
@property(nonatomic,copy)NSString *name;
@property(nonatomic,assign)int age;
-(void)print;
@end
2、在.m中实现协议方法 例如:
#import "Person.h"
@implementation Person
//在归档时自动调用这个方法,将所有的成员变量编码(给成员变量设置相应的键)
- (void)encodeWithCoder:(NSCoder *)aCoder
{
NSLog(@"%@",NSStringFromSelector(_cmd));
//encodeInt 用于整型数据 encodeObject 用于字符串或对象
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
}
//解归档时自动调用此方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
//如果父类也遵守了归档协议,self=[super initWithCode:aDecode]
if(self=[super init]){
//根据编码时的键取值decodeIntForKey 用于整型数据 decodeObjectForKey 用于字符串或对象
_name=[aDecoder decodeObjectForKey:@"name"];
_age=[aDecoder decodeIntForKey:@"age"];
}
return self;
}
-(void)print
{
NSLog(@"name:%@,age:%d",_name,_age);
}
@end
3、在main文件中执行方法 例如:
Person *p1=[[Person alloc]init];
p1.name=@"kingkong";
p1.age=; NSArray *array1=@[@"red",@"blue",@"yellow"]; //创建一个对象的缓冲区空间
NSMutableData *mutableData=[[NSMutableData alloc]init];
//创建一个归档器,关联一个对象的缓冲区
NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:mutableData];
//将对象编码后存入缓冲区
[archiver encodeObject:p1 forKey:@"person"];
[archiver encodeObject:array1 forKey:@"array"];
//编码结束
[archiver finishEncoding];//
//将缓冲区中的数据写入到文件中
NSString *path=@"/Users/kingkong/Desktop/day09/doc.data";
BOOL ret=[mutableData writeToFile: path atomically:YES];
NSLog(@"ret=%d",ret); //解归档操作
NSData *data=[NSData dataWithContentsOfFile: path];
//创建一个解归档器对象指定数据所在的缓冲区
NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:data];
//使用解归档器提取数据
Person *p2=[unarchiver decodeObjectForKey:@"person"];
NSArray *array2=[unarchiver decodeObjectForKey:@"array"];
//解归档结束
[unarchiver finishDecoding];
//NSLog(@"%@,%d",p2.name,p2.age);
[p2 print];
NSLog(@"%@",array2);
iOS阶段学习第18天笔记(Plist-Archiver-归档与解归档操作)的更多相关文章
- iOS 阶段学习第七天笔记(函数、递归)
iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2 ...
- iOS阶段学习第29天笔记(UITextField的介绍)
iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField 初始化实例代码: //创建一个UIt ...
- iOS阶段学习第20天笔记(MRC内存管理)
iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效 OC中采用 ...
- iOS阶段学习第15天笔记(NSDate操作)
iOS学习(OC语言)知识点整理 一.OC关于NSDate类的操作实例代码 //默认直接显示对象,显示的是格林威治时间 //获取当前日期时间的实例方法 NSDate *date1=[[NSDate a ...
- iOS阶段学习第14天笔记(NSString与NSMutableString)
iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- iOS阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
- iOS阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS 阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
随机推荐
- [PCB设计] 1、硬件原理图设计规范(一)——基本原则
1.1 目的 原理图设计是产品设计的理论基础,设计一份规范的原理图对设计PCB.跟机.做客户资料具有指导性意义,是做好一款产品的基础.原理图设计基本要求: 规范.清晰.准确.易读. 因此制定此< ...
- Ajax跨域访问XML数据的另一种方式——使用YQL查询语句
XML数据默认是不能在客户端通过Ajax跨域请求读取的,一般的做法是在服务器上写一个简单的代理程序,将远程XML的数据先读到本地服务器,然后客户端再从本地服务器通过Ajax来请求.由于我们不能对数据源 ...
- linux下进程间通信
信号 信号是进程间相互传递消息的一种方法,只是用来通知某进程发生了什么事件,并不给进程传递任何数据. #include <sys/types.h> #include <unistd. ...
- SQL—大话函数依赖与范式
说明:数据库中的某些概念真的很让人头疼,概念的东西本来就是很枯燥的,再加上枯燥的学习,那就更加枯燥了.概念这东西,你不理解也能生产东西,经验多了就行,但是为了更深入的学习,你还必须理解.这里,我抛开书 ...
- 早安Visual Studio!一次重构之旅,夏洛特烦恼
vs问题描述 我的IDE版本是vs2013,今天新开发了一个功能,是一个接口程序,当F5调试时,出现了莫名的错误,为什么呢?因为vs弹出了下面的一个框,只说是“未将对象引用设置到对象实例“. 点击”确 ...
- Node.js~sails.js~package.json的作用
回到目录 我们在sails框架进行node.js开发时,会涉及到项目的迁移,当迁移后可能你的module即丢失,这时,希望快速的安装所有的包包,可以使用下面命令 1 cd 你当前的sails项目 2 ...
- Python基础语法
学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组.链表.Map.Set等: ...
- 前端工程师技能之photoshop巧用系列扩展篇——自动切图
× 目录 [1]初始设置 [2]自动切图 前面的话 随着photoshop版本的不断升级,软件本身增加了很多新的功能,也为切图工作增加了很多的便利.photoshop最新的版本新增了自动切图功能,本文 ...
- MySQL PXC 高可用集群搭建
一些名词介绍: WS:write set 写数据集 IST: Incremental State Transfer 增量同步 SST:State Snapshot Transfer 全量同 ...
- 邻接表有向图(二)之 C++详解
本章是通过C++实现邻接表有向图. 目录 1. 邻接表有向图的介绍 2. 邻接表有向图的代码说明 3. 邻接表有向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywa ...