iphone开发中数据持久化之——属性列表序列化(一)

          数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式。本系列文章将介绍在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       

 

转载于:https://www.cnblogs.com/suncoolcat/p/3297358.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python多个变量与字符串判断_python怎么判断变量是否为字符串

在python中怎么连接变量和字符串?我真的懂你不是喜新厌旧只是我没能在你寂寞的时候伴你左右假设你的变量也是str类型 直接用号就可以a"test"connecta"teststr"也可以使用%s connect"%s teststr"%a Python是一种面向对象、直译式计算机…

对话jQuery之父John Resig:JavaScript的开发之路

在参加完CSDN组织的TUP对话大师系列演讲活动后,27岁的jQuery之父John Resig接受了本刊总编刘江的深度访谈,这篇对话文章,让我们一窥这位著名程序员的人生及技术感悟。 编程初体验 《程序员》:你是如何开始编程的? John…

互联网产品研发的典型流程

这张图是互联网产品研发的一种最佳实践,这张图中没有包含异常流的处理。通常异常出现在进入开发甚至测试阶段了还在变更需求,进入封版发版阶段了还在修改代码,所以在这两个时间点都有需求冻结和代码冻结。 转载于:https://www.cnblogs.com/mo…

智力杠杆

智力杠杆是我在车上看一本财经书时从金融杠杆联想到的; 言归正传,先从金融杠杆开始: 金融杠杆 金融杠杆(leverage)简单地说来就是一个乘号(*)。 使用这个工具,可以放大投资的结果,无论最终的结果是收益还是损失&#…

vscode 预览图片 插件_真的动手写的VSCode的插件(图片浏览)之1

由于本职工作中经常做图像处理,于时大量的图片浏览是不可避免的。怎么样不离开最近经常使用的VSCode,同时去看大量的图像对我来讲就是个不错的需求,尤其是某个目录下的文件。先谈基本的需求吧,显示一个目标下的所有图像&#xff0…

JS闭包实例

学习闭包的时候看的例子&#xff0c;记录上来&#xff0c;以便以后可以再次深入理解&#xff01; 1 <script type"text/javascript"> 2 <!-- 3 //事件处理封装函数 4 function f(obj,method){ 5 return function(e){ 6 e e || win…

JAVA mysql存数组_JAVA数组怎么存放数据库的元素

Stringsql"selectidfrombuildingwherenumber>?";Stringparas[]{number};spnewSqlHelper();ResultSetrssp.query(sql,paras);while(rs.next()){idrs.getString(1);/i假如循环后id...String sql "select id from building where number>?";String pa…

四十三 常用内建模块 base64

Base64是一种用64个字符来表示任意二进制数据的方法。 用记事本打开exe、jpg、pdf这些文件时&#xff0c;我们都会看到一大堆乱码&#xff0c;因为二进制文件包含很多无法显示和打印的字符&#xff0c;所以&#xff0c;如果要让记事本这样的文本处理软件能处理二进制数据&#…

ZOJ Problem Set - 1067 Color Me Less

这道题目很简单&#xff0c;考察的就是结构体数组的应用&#xff0c;直接贴代码了 #include <stdio.h> #include <math.h>typedef struct color {int r;int g;int b;}color;double distance(color c1,color c2) {return sqrt(pow((c1.b-c2.b),2)pow((c1.g-c2.g),2)…

JS 导出Excel,Word

//导出Excel function AllAreaExcel() { var oXL new ActiveXObject("Excel.Application"); var oWB oXL.Workbooks.Add(); var oSheet oWB.ActiveSheet; var seldocument.body.createTextRange(); sel.moveToEle…

c语言连接mysql(入门)_MySQL入门之C语言操作MySQL

基本概念C APIs包含在mysqlclient库文件当中&#xff0c;与MySQL的源代码一块发行&#xff0c;用于连接到数据库和执行数据库查询。#include #include #include #include #include int main(){int ret 0;MYSQL mysql;MYSQL *con NULL;con mysql_init(&mysql);if (con N…

Android UI 色板

感谢LZ 点击链接&#xff1a;android ui 色板 地址 转载于:https://www.cnblogs.com/sunjialiang/archive/2011/08/26/2154565.html

Spring中IoC的入门实例[转]

Spring的模块化是很强的&#xff0c;各个功能模块都是独立的&#xff0c;我们可以选择的使用。这一章先从Spring的IoC开始。所谓IoC就是一个用XML来定义生成对象的模式&#xff0c;我们看看如果来使用的。  数据模型  1、如下图所示有三个类&#xff0c;Human&#xff08;人…

方向gravity_逆转重力方向,更加自由翱翔——GNZ48 - 《gravity》

第二期给大家带来的这首歌出自GNZ48 第二套原创公演《双面偶像》&#xff0c;也是GNZ48 team g 在这套公演中的队歌&#xff0c;一首气势恢宏的歌曲。开头的小提琴就带入我们进入了一种紧张的情绪&#xff0c;随着第一个鼓点敲下&#xff0c;歌词也渐渐揭开面纱&#xff1a;“泥…

06-BCD计数器设计与应用——小梅哥FPGA设计思想与验证方法视频教程配套文档

芯航线——普利斯队长精心奉献 实验目的&#xff1a;1.掌握BCD码的原理、分类以及优缺点 2.设计一个多位的8421码计数器并进行验证 3.学会基本的错误定位以及修改能力 实验平台&#xff1a;无 实验原理&#xff1a; BCD码&#xff08;Binary-Coded Decimal&#xff09;又…

aix6.1 nfs

1.首先需要启动aix 上的nfs 服务 startsrc -g nfs 或者 smit nfs --> Network File System (NFS)  -->  Configure NFS on This System  -->  Start NFS 停止nfs stopsrc -g nfs 2. 在aix系统上&#xff0c;创建一个共享目录&#xff0c;与普通目录无区别 例…

Flash基本工具练习

练习一、按钮 练习二、卡通脸 练习三、图标 转载于:https://www.cnblogs.com/staceydesign/p/3313229.html

韦根w34是多少位_韦根接口读卡器说明书

距离读卡器颜色为:银白色 QZ-8600B 与 QZ-8600 蓝牙远距离读卡器颜色为:可乐红、 蓝色、橙色、黄色 读卡最大距离:1-20 米 标签协议:CDMA 接口类型:韦根 26/......支持 RS485 接口和韦根接口读卡器的接入,RS485 接口采用双接口设计,支 持环路断点故障检测和冗余功能;韦根格式支…

GMT与UTC简介

一、简介 许多人都知道两地时间表简称为GMT或UTC&#xff0c;而世界时区表则通称为World Time &#xff0c;那么GMT与UTC的实质原意又是为何&#xff1f;世界时区又是怎么区分的&#xff1f;面盘上密密麻麻的英文单字代表着什么意义与作用呢&#xff1f;这些都是新手在接触两地…

键盘事件的响应

在应用的程序的控制方面&#xff0c;更多的使用的是屏幕上的控件&#xff0c;但是有的时候也需要直接对键盘事件来进行响应。键盘是Android中主要的输入设备&#xff0c;对按键的响应的处理是响应之间在程序中使用键盘的核心内容。本例需要实现的内容是通过键盘来控制屏幕上的一…