以前是看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天奋战在写材料的世界里,终于搞完了,以后的事情就听天由命了,尽力就好了。
继续我钟爱的东东。
没有找到上传文件的方法,要不我就把代码传上来了。