《Beginning iOS 6 Development Exploring the iOS SDK》-十三章Basic Data Persistence-----之一

以前是看http://www.cnblogs.com/minglz/p/,这位老兄到了第十二章以后就罢工了,我也不知道为什么。所以现在只能对着英文的资料继续他未完成的事业了,不过也很有意思。

十三章是讲ios数据存储的方法,大致分为四种:

1、Property lists 属性列表
2、Object archives (or archiving) 对象归档
3、SQLite3 (iOS’s embedded relational database) 数据库存储
4、Core Data (Apple’s provided persistence tool) 核心数据

今天完成第一个Property lists 属性列表存储,还是流水账一样的来吧:

1、建立一个single app project(里面自带storyboard,和一个ViewController类)

2、画好四个label和四个Text控件

3、在ViewController.h里定义一个outlet collection变量

@property (strong, nonatomic) IBOutletCollection(UITextField) NSArray *lineFields;

简单说下,定义一个单一控件是用outlet,但这四个Text控件属性一样,可以用一个outlet集定义,就是数组,这样使用的好处是不用定义四个那么多,使用的时候就遍历就可以了)

定义完后,关联四个控件到这个变量(control+)

4、这时候就可以写ViewController里的东西了。程序运行的工作流程是这样的:

     当运行起这个程序(我叫作PropertyList)时,首先进入ViewController.m里的viewDidLoad()方法,这个里面就是找到系统用户Document目录data.plist文件,从里面取出Text参数,分别输给四个文本框。然后打开一个通知中心(我也叫他消息中心),向通知中心存入要消息响应的事件(对象方法)。这个消息响应事件就是applicationWillResignActive,当应用程序退出后台不在活动的时候,例如用户按了home键这个消息就被触发了,触发后程序就会将四个文本框里的数据存入到data.plist里。整个流程就是这个样子。具体写的代码解释看下面。

5、在ViewController.m里的viewDidLoad()代码如此:

NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
for (int i = 0; i < 4; i++) {
UITextField *theField = self.lineFields[i];
theField.text = array[i];
}
}
UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(applicationWillResignActive:)
name:UIApplicationWillResignActiveNotification
object:app];

前面那段代码好理解,就是遍历数组将text传给Text控件,关键是

addObserver这个函数,就是添加消息到通知中心。其中有四个参数。

1)指定观察者是谁,此参数不能为空,一般为self

2)观察者要响应的方法,此方法必须要有而且只有一个参数'NSNotification'

3)通知的名称,在通知中心注册的名字,通知中心要找消息就通过这个标识

4)谁发送的这个通知


6、下面就是在要响应的消息里写代码

NSString *filePath = [self dataFilePath];
NSArray *array = [self.lineFields valueForKey:@"text"];
[array writeToFile:filePath atomically:YES];

存入Text控件里的文本到data.plist里。顺便说一下,data.plist位置是通过下面这个方法定位

- (NSString *)dataFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
}

我的系统是10.8.5山狮,DocumentDirectory得绝对路径是@"/Users/wl/Library/Application Support/iPhone Simulator/6.1/Applications/FA637AB7-3EA2-4196-91D8-4202C447B0D6/Documents/data.plist"

连续5天奋战在写材料的世界里,终于搞完了,以后的事情就听天由命了,尽力就好了。

继续我钟爱的东东。

没有找到上传文件的方法,要不我就把代码传上来了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值