数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式。本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号、对象归档化以及iphone的嵌入式关系数据库SQLite。本文主要介绍属性序列号的数据持久化方法。

在许多应用程序中都使用了属性列表,比如使用属性列表来指定应用程序的首选项,可以使用Xcode或Property List Editor来手动编辑它们,并且只要字典或数组仅包含特定的可序列化对象,就可以使用NSDictionary和NSArray实例写入属性列表以及从属性列表中来创建他们。尽管,可以让任何对象序列化,但是智能将某些对象放置到某个集合类中(如NSDictionary或NSArray),然后使用该集合类的writeToFille::atomically方法将他们存储到属性列表中。可以序列化的Objective-C对象有:NSArray、 NSMutableArray、NSDictionary、NSMultabableDictionary、NSData、NSMutableData、NSString、NSMutableString、NSNumber、NSDate等。

如果打算使用属性列表持久保存应用程序数据,则可以使用NSArray或NSDictionary容纳所需要持久保存的数据。假设存在NSArray或NSDictionary中的所有对象都是课序列化的对象,则可以通过对字典或数组实例调用writeToFile:atomically方法来编写属性列表。但是,属性列表方法的一个突出问题就是无法将自定义对象序列化到属性列表中,也不能使用通过Cocoa Touch交付且未在之前的可序列化对象列表中指定的其他类,这也意味着无法直接使用NSURL、UIImage和UIColor等类。

下面通过实例来说明使用属性列表实现数据持久方法。创建一个single view application应用程序,在实现数据属性序列化之前,首先要当前应用程序的路径以及文件名,可以通过下面程序来获得存储文件的路径和创建文件名。

- (NSString*)dataFilePath
{
NSArray* paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentDirectory = [paths objectAtIndex:0];
return [documentDirectory stringByAppendingPathComponent:kFilename];
}

接着,我们需要实现程序推出时对数据进行持久化保存,也即存到文件中。此时,我们需要实现一个通知方法:applicationWillTerminate。该方法有一个指向NSNotification的指针参数。通知是一种对象可以用于彼此通信的轻量级机制,类似MFC的消息机制。本程序实现一个简单的序列化功能,主要是实现将一个textFiled控件的text内容写入文件中。该方法的实现代码如下。

- (void)applicationWillTerminate:(NSNotification *)notification
{
NSMutableArray* array = [[NSMutableArray alloc]init];
[array addObject:field1.text];
[array addObject:field2.text];
[array addObject:field3.text];
[array addObject:field4.text];
[array writeToFile:[self dataFilePath] atomically:YES];
}

除此之外,应用程序还需要做两件事:一是检查数据文件是否存在;二是如果文件存在,就用该文件的内容实例化数组,并将数组数据赋给对应的textFiled对象的text属性。该功能可以在viewDidLoad方法中实现,代码如下:

- (void)viewDidLoad
{
// Do any additional setup after loading the view, typically from a nib.
NSString* filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
NSArray* array = [[NSArray alloc]initWithContentsOfFile:filePath];
field1.text = [array objectAtIndex:0];
field2.text = [array objectAtIndex:1];
field3.text = [array objectAtIndex:2];
field4.text = [array objectAtIndex:3];
} UIApplication* app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:app]; [super viewDidLoad];
}

从属性列表加载数据之后,就获得了对应用程序的引用,并使用该引用订阅UIApplicationiWillTerminateNotification,使用默认的NSNotification实例以及一个名为addObserver:selector:name:object的方法。

实现结果如下所示:

该程序的源代码可以通过一下链接下载:http://download.csdn.net/detail/kezunhai/6194277

iphone开发中数据持久化之——属性列表序列化(一)的更多相关文章

  1. iphone开发中数据持久化之——嵌入式SQLite(三)

    前两篇分别讨论了使用属性列表的数据持久化.使用对象归档的数据持久化,本文将讨论第三个实现数据持久化的方法---嵌入式SQL数据库SQLite3.SQLite3在存储和检索大量数据方面非常有效.它还能够 ...

  2. iphone开发中数据持久化之——模型对象归档(二)

    在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...

  3. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  4. [Objective-C] 012_数据持久化_XML属性列表,NSUserDefaults

    在日常开发中经常要对NSString.NSDictionary.NSArray.NSData.NSNumber这些基本类的数据进行持久化,我们可以用XML属性列表持久化到.plist 文件中,也可以用 ...

  5. iOS开发中数据持久化

    使用几个小例子分别实现 归档NSKeyedArchiver.NSUserDefaults.plist文件数据存储,简单直观.代码地址

  6. iOS数据存储之属性列表理解

    iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起 ...

  7. 数据存储之属性列表Plist

    常用的数据存储有属性列表.偏好设置.归档.sqlite.coreData.上一博客了解了沙盒,现在了解下属性列表Plist. 通常通过NSArray.NSDictionary集合类的WriteToFi ...

  8. iPhone开发中从一个视图跳到另一个视图有三种方法:

    iPhone开发中从一个视图跳到另一个视图有三种方法:   1.self.view addSubView:view .self.window addSubView,需要注意的是,这个方法只是把页面加在 ...

  9. iphone 开发中使用zbar时遇到的几个典型问题解决方法。

    iphone 开发中使用zbar时遇到的几个典型问题解决方法.   在近期的一个ios项目中使用到了一个二维码扫描库(Qrcode)--ZBar, 期间遇到2个问题.   1. zbar下载后使用其l ...

随机推荐

  1. 获取Enum的扩张方法。

    public static class EnumExtention { /// <summary> /// 获取枚举的描述信息 /// </summary> /// <t ...

  2. 《tr命令》-linux命令五分钟系列之六

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  3. js事件处理 —— 详解

    对于JS事件处理分为四部分: 1.html事件处理程序 直接添加到HTML结构中 解析:用html处理程序可以直接在button元素里直接调用,但是维护性不是很方便 <!DOCTYPE html ...

  4. VIM中文乱码

    下面是关于VIM中文乱码问题的解决方法: 打开VIM的配制文件在里面加上一段这样的代码就可以了: set encoding=prc

  5. jQuery简单的轮播特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. python模块之hashlib加密

    40.加密模块:hashlib      1.           >>> import hashlib >>> ret1 = hashlib.md5()     ...

  7. odoo view field option, action flage 参数

    options JSON object specifying configuration option for the field's widget (including default widget ...

  8. Ubuntu下安装和配置Apache2

    http://www.blogjava.net/duanzhimin528/archive/2010/03/05/314564.html 在Ubuntu中安装apache 安装指令:sudo apt- ...

  9. Extjs打开window窗口自动加载html网页

    Window inherits the autoLoad config option from Panel. Note that I included all config options below ...

  10. 【Java】Hibernate4实战 之 第一部分Hibernate入门

    Hibernate是什么:ORMapping的原理 Hibernate是轻量级的ORMapping框架. ORMapping基本规则: 类和表映射. 实例和数据库表中的一条数据映射. 实例的属性和数据 ...