#import <Foundation/Foundation.h>

@interface Student : NSObject <NSCoding>;
@property(nonatomic,strong)NSString* name;
@property(nonatomic,assign)int age;
@property(nonatomic,copy)NSString* tel; -(id)initWithName:(NSString*)name endAge:(int)age endTel:(NSString*)tel; @end #import "Student.h" @implementation Student
@synthesize name=_name,tel=_tel,age=_age;
-(id)initWithName:(NSString *)name endAge:(int)age endTel:(NSString *)tel
{
if (self=[super init]) {
self.name=name;
self.age=age;
self.tel=tel;
}
return self;
} -(void)encodeWithCoder:(NSCoder *)aCoder
{
NSLog(@"编码中。。。。");
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.age forKey:@"age"];
[aCoder encodeObject:self.tel forKey:@"tel"];
// [aCoder encodeValueOfObjCType:@"" at:<#(const void *)#>] }
-(id)initWithCoder:(NSCoder *)aDecoder
{
NSLog(@"解码中。。。。");
self=[self initWithName:[aDecoder decodeObjectForKey:@"name"] endAge:[aDecoder decodeIntForKey:@"age"] endTel:[aDecoder decodeObjectForKey:@"tel"]]; return self;
} @end #import "ViewController.h"
#import "Student.h"
@interface ViewController ()
{
UITextField* _tf1;
UITextField* _tf2;
UITextField* _tf3;
}
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[self encodeStu]; // Do any additional setup after loading the view, typically from a nib.
// Dispose of any resources that can be recreated
_tf1=[[UITextField alloc]initWithFrame:CGRectMake(, , , )]; _tf2=[[UITextField alloc]initWithFrame:CGRectMake(, , , )];
_tf2.keyboardType=UIKeyboardTypeDecimalPad; _tf3=[[UITextField alloc]initWithFrame:CGRectMake(, , , )]; _tf1.borderStyle=UITextBorderStyleRoundedRect;
_tf2.borderStyle=UITextBorderStyleRoundedRect;
_tf3.borderStyle=UITextBorderStyleRoundedRect;
[self.view addSubview:_tf1];
[self.view addSubview:_tf2];
[self.view addSubview:_tf3]; //进入后台,触发写文件方法,
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(write) name:UIApplicationDidEnterBackgroundNotification object:nil ];
//进入应用时触发
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reade) name:UIApplicationDidBecomeActiveNotification object:nil ]; NSDictionary* dic=[[NSDictionary alloc]initWithObjectsAndKeys:@"name",@"xxx",@"age",@"",@"tel",@"", nil];
NSLog(@"%@",[dic objectForKey:@""]);
}
-(void)reade{
//读取文件路径
NSString * path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:]stringByAppendingPathComponent:@"writefile.text" ];
NSLog(@"read path :%@",path);
NSArray* arr=[NSArray arrayWithContentsOfFile:path];
_tf1.text=arr[];
_tf2.text=arr[];
_tf3.text=arr[]; } -(void)viewWillAppear:(BOOL)animated
{ } -(void)write{
NSString * path=[[NSBundle mainBundle]bundlePath]; //path是文件夹,那么就再加上文件名才是文件完整路径
NSString* path2=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:];
// path2 = [path stringByAppendingString:@"/writefiles.tet"];
path2= [path2 stringByAppendingPathComponent:@"writefile.text"]; NSLog(@"%@,%@",path,path2);
NSArray* writeArr=@[_tf1.text,_tf2.text,_tf3.text]; [writeArr writeToFile:path2 atomically:YES]; } //归档解决自定义对象
//数据持久化本质:保持状态跟数据 //归档调用,加密写入文件
-(void)loadView
{
[super loadView]; //从程序输入数据 并构建自定义对象(初始化要归档的对象,是数据的生成) Student* stu=[[Student alloc]initWithName:@"啊城" endAge: endTel:@""];
// NSArray* stu=[[NSArray alloc]initWithObjects:@"sss",@"aaaa",@"222", nil];
NSMutableData* data=[[NSMutableData alloc]init];
//构建归档器
NSKeyedArchiver* archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
//归档 没有储存动作,只负责编码
[archiver encodeObject:stu forKey:@"stu"];
//千万不能忘记,归档完毕马上调用
[archiver finishEncoding]; //写入文档
[data writeToFile:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:]stringByAppendingPathComponent:@"bba1.text" ] atomically:YES];
NSLog(@"111 Stu name is %@,gender is %d,tel is %@",stu.name,stu.age,stu.tel);
}
//解档
-(void)encodeStu{
//取数据,以待解码归档,注意一定要用NSDocumentDirectory
NSData* data= [NSData dataWithContentsOfFile:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:]stringByAppendingPathComponent:@"bba1.text" ]];
//解档器
NSKeyedUnarchiver* uA=[[NSKeyedUnarchiver alloc]initForReadingWithData:data];
//解档->还原对象,注意解档和键需要和归档一致
Student* stu=[uA decodeObjectForKey:@"stu"];
//解码器,中decodeObjectForKay方法,在解码过程中,会调用initWithCoder方法,并通过对象类型到类中调用已重写实现的initWithCoder方法 NSLog(@"2222 Stu name is %@,gender is %d,tel is %@",stu.name,stu.age,stu.tel);
//
[uA finishDecoding]; } -(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; } @end

IOS s数据存储之归档解档的更多相关文章

  1. IOS数据存储之归档/解档

    前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...

  2. 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver

    在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...

  3. iOS开发UI篇—ios应用数据存储方式(归档)

    iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...

  4. iOS开发UI篇—ios应用数据存储方式(归档) :转发

    本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist ...

  5. ios应用数据存储方式(归档) - 转

    一.简单说明  1.在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦.  2.偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置 ...

  6. 数据持久化------Archiving(归档,解档)

    其中TRPerson为自定义的继承自NSObject的类的子类  其中有两个属性,name 和 age .h文件 #import @interface TRPerson : NSObject<& ...

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

    1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...

  8. iOS开发中的4种数据持久化方式【一、属性列表与归档解档】

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...

  9. iOS 浅复制、深复制、完全复制的知识点梳理验证(附加归档解档)

    在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值 ...

随机推荐

  1. view坐标_ _ Android应用坐标系统全面详解

    转:http://blog.csdn.net/yanbober/article/details/50419117 1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自 ...

  2. pl/sql和sql的区别

    源地址:https://zhidao.baidu.com/question/187511430.html 1 sql(数据定义语言) 和PL/Sql的区别:答:SQL是结构化查询语言,比较接近自然语言 ...

  3. Blackfin DSP(六):BF533的SPORT接口

    1.特性 bf533有两个SPORT口(synchronous serial Port),即同步串行接口.完全独立的接收和发送通道,且每个通道都具有缓冲,最高速度可达SCLK/2.最大支持32bit字 ...

  4. iOS开发官方文档汇总

    程序员的学习过程是无止境的,程序员学习的途径是多样的.可以从视频教程中领悟,也可以从他人的代码中 理解.但当我们专注于某一个平台在开发的时候,对于某个API使用或者功能实现有疑问,通常简单的测试可以让 ...

  5. loadrunner 功能详解(一) - Run-time Settings

    1.General / Run Logic  Number of Iterations:说明的是反复循环的次数. 常境的时间中,如果时间设为5分钟,而实际上程序的运行只需要1分钟,而在这项中,选择的是 ...

  6. python ConfigParser、shutil、subprocess、ElementTree模块简解

    ConfigParser 模块 一.ConfigParser简介ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类 ...

  7. 自动化脚本过程中出现This element neither has attached source nor attached Javadoc...的解决方法

    This element neither has attached source nor attached Javadoc and hence no Javadoc could be found Ec ...

  8. MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例

    有二三年没写代码了,**内的工作就是这样,容易废人!看到园子里这么多大侠朝气蓬勃的,我想也要学点东西并和大家分享,共同进步!快乐每一天,进步每一天!言归正传! 通过最近一段时间对MVC5.EF6的学习 ...

  9. 《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld

    最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯 ...

  10. 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块

    一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...