- 浏览: 534958 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tangyunliang:
大哥你太历害了谢谢
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
u013015029:
LZ,请问下,在// 添加消息到聊天窗口 , 这里获取Ed ...
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
endual:
怎么保持会话,我搞不懂啊
Android基于XMPP Smack Openfire开发IM【一】登录openfire服务器 -
donala_zq:
显示:[2013-11-30 11:50:36 - Andro ...
android-----------新浪微博 -
donala_zq:
哥,运行不了啊
android-----------新浪微博
实现的功能:1)演示使用归档持久化数据。
关键词:数据持久化 归档 NSKeyedArchiver NSKeyedUnarchiver
1、将上一篇iPhone开发数据持久化总结之第2篇属性文件(.plist)的工程拷贝一份,名称修改为Persistence-archiver,工程结构如下:
[img]
[/img]
2、添加Person.h类,如下:
Person.h:
Person.m:
3、接下来主要修改ViewController
ViewController.h,主要是修改了宏,如下:
主要修改了ViewController.m,如下:
4、通过iPhone开发【二十】数据持久化总结之第1篇NSUserDefaults 可以知道保存数据archive文件的存储位置是:
/Users/duobianxing/Library/Application Support/iPhone Simulator/5.0/Applications/F694104D-894D-4230-A01B-C62066B3DEC8/Documents
5、总结:
与属性列表相比,归档可以写入复杂的对象(Person类的实例)。
关键词:数据持久化 归档 NSKeyedArchiver NSKeyedUnarchiver
1、将上一篇iPhone开发数据持久化总结之第2篇属性文件(.plist)的工程拷贝一份,名称修改为Persistence-archiver,工程结构如下:
[img]
[/img]
2、添加Person.h类,如下:
Person.h:
#import <Foundation/Foundation.h> @interface Person : NSObject<NSCoding,NSCopying> @property(nonatomic,retain)NSString *name; @property(nonatomic,retain)NSString *gender; @property(nonatomic,retain)NSString *age; @property(nonatomic,retain)NSString *education; @end
Person.m:
#import "Person.h" #define kNameKey @"name" #define kGenderKey @"gender" #define kAgeKey @"age" #define kEducationKey @"education" @implementation Person @synthesize name,gender,age,education; #pragma mark - #pragma mark NSCoding -(void)encodeWithCoder:(NSCoder *)aCoder{//编码 [aCoder encodeObject:name forKey:kNameKey]; [aCoder encodeObject:gender forKey:kGenderKey]; [aCoder encodeObject:age forKey:kAgeKey]; [aCoder encodeObject:education forKey:kEducationKey]; } -(id)initWithCoder:(NSCoder *)aDecoder{//解码 if(self == [super init]){ name = [[aDecoder decodeObjectForKey:kNameKey]retain]; gender = [[aDecoder decodeObjectForKey:kGenderKey]retain]; age = [[aDecoder decodeObjectForKey:kAgeKey]retain]; education = [[aDecoder decodeObjectForKey:kEducationKey]retain]; } return self; } #pragma mark - #pragma mark NSCopying -(id)copyWithZone:(NSZone *)zone{ Person *person = [[[self class]allocWithZone:zone]init]; person.name = [[self.name copyWithZone:zone]autorelease]; person.gender = [[self.gender copyWithZone:zone]autorelease]; person.name = [[self.name copyWithZone:zone]autorelease]; person.name = [[self.name copyWithZone:zone]autorelease]; return person; } @end
3、接下来主要修改ViewController
ViewController.h,主要是修改了宏,如下:
//#define kFileName @"data.plist" #define kFileName @"archive" #define kDataKey @"Data" #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property(nonatomic,retain)IBOutlet UITextField *name; @property(nonatomic,retain)IBOutlet UITextField *gender; @property(nonatomic,retain)IBOutlet UITextField *age; @property(nonatomic,retain)IBOutlet UITextField *education; -(NSString *)dataFilePath; -(void)applicationWillResignActive:(NSNotification *)nofication; @end
主要修改了ViewController.m,如下:
#import "ViewController.h" #import "Person.h" @implementation ViewController @synthesize name,gender,age,education; -(NSString *)dataFilePath{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); NSString *documentsDirectory = [paths objectAtIndex:0]; return [documentsDirectory stringByAppendingPathComponent:kFileName]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } #pragma mark - View lifecycle - (void)viewDidLoad { // Do any additional setup after loading the view, typically from a nib. NSString *filePath = [self dataFilePath]; NSLog(@"filePath=%@",filePath); if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){ //属性列表 /* NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath]; name.text = [array objectAtIndex:0]; gender.text = [array objectAtIndex:1]; age.text = [array objectAtIndex:2]; education.text = [array objectAtIndex:3]; [array release];*/ NSData *data = [[NSMutableData alloc]initWithContentsOfFile:[self dataFilePath]]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data]; Person *person = [unarchiver decodeObjectForKey:kDataKey]; [unarchiver finishDecoding]; name.text = person.name; gender.text = person.gender; age.text = person.age; education.text = person.education; [unarchiver release]; [data release]; } UIApplication *app = [UIApplication sharedApplication]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app]; [super viewDidLoad]; } -(void)applicationWillResignActive:(NSNotification *)nofication{ //属性列表 /* NSMutableArray *array = [[NSMutableArray alloc]init]; [array addObject:name.text]; [array addObject:gender.text]; [array addObject:age.text]; [array addObject:education.text]; [array writeToFile:[self dataFilePath] atomically:YES]; [array release];*/ Person *person = [[Person alloc]init]; person.name = name.text; person.gender = gender.text; person.age = age.text; person.education = education.text; NSMutableData *data = [[NSMutableData alloc]init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; [archiver encodeObject:person forKey:kDataKey]; [archiver finishEncoding]; [data writeToFile:[self dataFilePath] atomically:YES]; [person release]; [archiver release]; [data release]; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; self.name = nil; self.gender = nil; self.age = nil; self.education = nil; } -(void)dealloc{ [name release]; [gender release]; [age release]; [education release]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } @end
4、通过iPhone开发【二十】数据持久化总结之第1篇NSUserDefaults 可以知道保存数据archive文件的存储位置是:
/Users/duobianxing/Library/Application Support/iPhone Simulator/5.0/Applications/F694104D-894D-4230-A01B-C62066B3DEC8/Documents
5、总结:
与属性列表相比,归档可以写入复杂的对象(Person类的实例)。
发表评论
-
新风作浪博客学习(十九)在iOS虚拟键盘上添加动态隐藏按钮
2013-06-08 09:19 860为了给用户比较良好的交付,想在键盘上添加一个按钮,实时根据键盘 ... -
新风作浪博客学习(十八)openURL的使用(iOS调用系统电话、浏览器、地图、邮件等) .
2013-06-08 09:19 1004今天遇见一行代码实现打开一个网页,比起印象里的UIWebVie ... -
新风作浪博客学习(十七)UIImageView响应点击事件 .
2013-06-08 09:19 705有时候会遇到点击一张图片,然后让这张图片触发一个事件,或者是跳 ... -
新风作浪博客学习(十六)Navigation + Tab Bar 常用组合框架 .
2013-06-07 08:50 1253看到很多项目中都采用的是Navigation加Tab Bar组 ... -
新风作浪博客学习(十五)google地图定位小Demo .
2013-06-07 08:50 1141[img][/img]今天写的是一个简单功能的google地图 ... -
新风作浪博客学习(十四)怎样向iPhone模拟器中添加图片 .
2013-06-07 08:50 786在我们做项目中可能需要使用图库,模拟器是有图库的,但是如何像其 ... -
新风作浪博客学习(十三)表视图的分组分区和索引分区 .
2013-06-07 08:50 801本次实现的是表视图的分区和索引,代码和前面都差不多,主要还是代 ... -
新风作浪博客学习(十二)代码实现UITableViewCell表视图单元定制 .
2013-06-07 08:49 1001通常情况下我们会希望单元格UITableViewCell显示自 ... -
新风作浪博客学习(十一)UITableViewCell的标记、移动、删除、插入 .
2013-06-06 09:15 1118这篇文章是建立在 代码实现 UITableView与UITa ... -
新风作浪博客学习(十)代码实现 UITableView与UITableViewCell .
2013-06-06 09:14 1155我们常用的表格类视图就是用 UITableView与UITab ... -
新风作浪博客学习(九)两个UIPickerView控件间的数据依赖 .
2013-06-06 09:14 1072本篇实现功能是两个选取器的关联操作,滚动第一个滚轮第二个滚 ... -
新风作浪博客学习(八)代码实现UIPickerView .
2013-06-06 09:14 1284先说一下当个组件选取器,我们创建一个数组NSAray来保存选取 ... -
新风作浪博客学习(七)代码 实现UIDatePicker控件 和 Tab Bar 视图切换 .
2013-06-06 09:15 1108感觉代码写控件都一个理,先在ViewDidLoad中创建控件对 ... -
新风作浪博客学习(六)ios 视图切换翻页效果 .
2013-06-05 11:18 1061本文写的是视图切换,涉及到的内容有 1.实现代码添加Navi ... -
新风作浪博客学习(五)代码实现UISlider 和 UISwitch .
2013-02-18 09:15 1153本次实现的UISlider和UISwi ... -
新风作浪博客学习(四)把plist里数据显示在textField上 .
2013-02-18 09:15 918在代码实现Lable 、textFie ... -
新风作浪博客学习(三)NSBundle读取图片 plist文件和txt文件
2013-02-18 09:15 1731本文想简单介绍一下NSBundle读取图片到视图上,读取pli ... -
新风作浪博客学习(二)代码实现Lable 、textField创建界面以及键盘的处理
2013-02-18 09:15 1174今天写的是用代码实现一个简单界面,代码重复率比较高,可读性不是 ... -
新风作浪博客学习(一)plist文件读写操作
2013-02-18 09:14 1363文件plist 全名Property List,属性列表文件, ... -
GCDiscreetNotificationView提示视图
2013-06-05 11:17 559先看一下效果图: [img] ...
相关推荐
本文将通过三个具体的实例深入探讨iPhone上实现数据持久化的三种方法:属性列表、对象归档和SQLite3数据库。 首先,我们来看**属性列表(Property List)**的使用。属性列表是iOS中一种简单且常用的数据存储方式,...
在iOS开发中,数据持久化是一项关键技能,它允许应用程序保存数据并在后续的使用中恢复这些数据,即使应用被关闭或设备重启。本教程聚焦于iPhone应用如何利用对象归档来实现数据持久化。对象归档是Objective-C中一种...
本资料提供的“读写数据-数据归档源码”是关于如何在iOS环境中进行数据持久化的实例,它涵盖了两个关键概念:读取数据和数据归档。接下来,我们将深入探讨这两个知识点。 一、读取数据 在iOS应用中,数据读取通常...
iPhone中的数据持久化方法主要包括属性列表(Property List)、对象归档(Object Archiving)、嵌入式数据库(SQLite3)以及其他一些方法。 首先,属性列表是处理简单数据(如字符串、数组和字典等)最直接的方法,...
在iOS开发中,序列化和反序列化是两个重要的概念,它们主要用于数据持久化和传输。序列化是指将对象转换为可存储或可传输的格式,如JSON、XML或二进制,而反序列化则是将这些格式的数据恢复为原始的对象形式。在...
同时,框架中的`NSKeyedArchiver`和`NSKeyedUnarchiver`类支持对象的归档和解归档,使得对象可以被序列化并保存到文件中,或者从文件中反序列化恢复出来,这对于数据持久化非常关键。 ### 网络通信 对于网络通信...
这些示例代码可以帮助开发者深入理解并掌握iOS应用开发的核心概念,尤其是针对界面展示、数据持久化以及编码解码等方面。下面我们将逐一解析这些Demo所涉及的知识点。 1. **09 Nav**: 这个Demo可能涉及到导航控制器...
归档是另一种数据持久化策略,主要用于对象的序列化和反序列化。当需要将自定义对象保存到文件系统或通过网络传输时,归档是一种有效的方式。Objective-C和Swift均支持归档机制,可以通过`NSKeyedArchiver`和`...
总之,理解iPhone OS的架构和SDK工具,掌握Objective-C 2.0的内存管理和容器使用,以及有效的通信和数据持久化技术,是成功开发iPhone应用程序的关键步骤。在实际开发中,这些知识点将贯穿于项目的各个阶段,从界面...
在iOS应用开发中,"读档写档"(读取和保存数据)是常见的操作,尤其是在需要持久化用户数据或应用程序状态时。本篇将详细阐述iOS中的数据存储方法,包括如何读取、写入、删除和添加数据,并结合提供的`RecordTest.h`...