IOS s数据存储之归档解档
#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数据存储之归档解档的更多相关文章
- IOS数据存储之归档/解档
前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...
- 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...
- iOS开发UI篇—ios应用数据存储方式(归档)
iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...
- iOS开发UI篇—ios应用数据存储方式(归档) :转发
本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist ...
- ios应用数据存储方式(归档) - 转
一.简单说明 1.在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦. 2.偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置 ...
- 数据持久化------Archiving(归档,解档)
其中TRPerson为自定义的继承自NSObject的类的子类 其中有两个属性,name 和 age .h文件 #import @interface TRPerson : NSObject<& ...
- iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...
- iOS开发中的4种数据持久化方式【一、属性列表与归档解档】
iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...
- iOS 浅复制、深复制、完全复制的知识点梳理验证(附加归档解档)
在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值 ...
随机推荐
- WS-Security
ylbtech-Miscellaneos: WS-Security A,返回顶部 1, WS-Security (Web服务安全) 是一种提供在Web服务上应用安全的方法的网络传输协议. 2004年4 ...
- 黑马程序员_JAVA基础知识总结3
------- android培训.java培训.期待与您交流! ---------- Java源文件的扩展名是.java,编译之后生成.class的文件.所有的类都有一个共同的继承祖先Object类 ...
- Thinkphp源码分析系列–开篇
目前国内比较流行的php框架由thinkphp,yii,Zend Framework,CodeIgniter等.一直觉得自己在php方面还是一个小学生,只会用别人的框架,自己也没有写过,当然不是自己不 ...
- MySQL 批量插入 Update时Replace
建一张试验表如下: 一.批量插入 MySQL的INSERT有一种写法如下: INSERT INTO person VALUES (NULL,'关羽', '2016-04-22 10:00:00'), ...
- Linux:基础配置--备忘
1.网络 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=08:00:27:77:F3:A1 TYPE=Ethernet UU ...
- maven提示invalid LOC header (bad signature)的解决办法
今天执行mvn test的时候提示: 错误:读取 /home/subaochen/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.ja ...
- innobackupex的安装
innobackupex的安装方法有3种: 通过RPM包安装: 通过源码包安装: 通过二进制包安装. 第3种方法最简单,这里只介绍它.以下是安装步骤: 打开官方下载链接: Version默认是最新版本 ...
- 关于mysql和Apache以及nginx的监控脚本怎么写会比较好的记录
最近,自己业务进行上线,上线后,需要考虑的是对各种服务进行监控,包括(httpd服务,mysqld服务等),现在想以mysqld服务为例总结下那种方式的脚本最为专业和合理: (1).根据mysql的端 ...
- ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread
ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[appclient-registration-retr ...
- VS2008的DLL项目添加了方法但是找不到怎么办?
VS2008中建立了一个DLL项目,使用了一段时间后,在其中一个类中添加了一个方法,然后编译后,拷贝了新的.h文件到使用DLL的项目中,并且.dll和.lib也拷贝到了需要的位置,但是在目标项目中 ...