iOS开发之属性列表
来源:互联网 发布:政府高官子女知乎 编辑:程序博客网 时间:2024/06/01 09:44
使用属性列表持久化数据对象非常方便,只要是数组或者字典中包含的对象是特定的可序列话对象(包括NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSData,NSMutableData,NSString,NSMutableString,NSNumber,NSDate),就可以直接通过NSDictionary和NSArray的实例方法将其保存到属性列表或者从属性列表中读取他们。
下面通过一个简单的例子来展示一下属性列表的用法。实现在程序退出之前把数据保存到属性列表,下次启动时,重新从属性列表中加载这些数据。
1、创建Persistence项目
使用single view application模版创建一个项目,命名为Persistence。打开Main.storyboard,构建如下视图。包括4个标签和4个文本字段。
2、编辑ViewController类
将4个文本字段关联到输出口集合。
<span style="font-size:14px;">#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property (nonatomic, strong) IBOutletCollection(UITextField)NSArray * lineFields;@end</span>
<span style="font-size:14px;">- (NSString *)getFilePath{ NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString * documentDirectory = paths[0]; NSString * dataPath = [documentDirectory stringByAppendingPathComponent:@"textFeildText.plist"]; return dataPath;}</span>
然后编辑viewDidLoad方法,程序启动时,从属性列表获取数据。
<span style="font-size:14px;">- (void)viewDidLoad{ [super viewDidLoad]; /*判断当前路径下文件是否存在*/ if ([[NSFileManager defaultManager] fileExistsAtPath:[self getFilePath]]) { /*如果存在,用该文件的内容实例化数组*/ NSArray * textArray = [NSArray arrayWithContentsOfFile:[self getFilePath]]; for (int i =0; i<4; i++) { UITextField * textField = self.lineFields[i]; textField.text = textArray[i]; } } /*注册通知*/ NSNotificationCenter * center = [NSNotificationCenter defaultCenter];[center addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil];}</span>
最后来看看applicationWillResignActive方法里面做了什么。
<span style="font-size:14px;">- (void)applicationWillResignActive:(NSNotification *)notification{ NSArray * textArray = [self.lineFields valueForKey:@"text"]; [textArray writeToFile:[self getFilePath] atomically:YES];}</span>
因为我们在viewDidLoad方法中注册了相应的通知,所以一旦应用程序进入后台,此方法将会被调用。此方法很简单,首先将4个文本字段中包含的内容添加到一个数组中。然后通过调用数组的writeToFile方法,将数据保存到属性列表。在这里解释一下writeToFile方法的两个参数,第一个参数比较清楚,指定数据的存储路径,在这里我们还是把它存储在指定的document目录下。主要时第二个参数atomically,如果设置为YES,则表示将数据先写入一个辅助文件,而不是直接下入到指定目录,成功写入到辅助文件之后,辅助文件将被复制到指定目录下。这是一个安全的写入文件的方法,因为如果一旦写入文件的过程中程序发生崩溃,现有的文件不会被破坏导致数据丢失,尽管这增加了一点点开销,但是还是值得的。
运行程序,分别在4个文本字段中输入文字,然后按home键使它进入后台,重新启动程序,发现4个文本框重新加载了上次输入的文本。
属性列表非常方便、实用。但是有两个缺点:
1、只适用于特定的系统默认支持可序列化的对象
2、只能将一小部分存储在属性列表中,如果数据量比较大,则不适合采用。
0 0
- iOS开发之属性列表
- IOS之【属性列表】
- ios开发属性列表例子
- ios-day12-02(ios开发中数据存储之属性列表归档(plist))
- iOS持久化存储之属性列表
- IOS 数据持久化之属性列表
- 《精通iOS开发·第六版》数据持久化基础知识之属性列表持久化
- IOS开发之属性详解
- iOS开发之UIViewController属性
- iOS开发之translucent属性
- iOS开发之属性关键字
- ios开发之获取应用程序列表
- iOS开发:通讯录之通讯录列表实现
- iOS属性列表
- 【读书笔记】iOS-属性列表
- IOS开发之UIView之UIViewContentMode属性
- IOS开发之UIView之UIViewContentMode属性
- IOS开发之UIView之UIViewContentMode属性
- 社会最大的杯具271974078
- 分享十条nmap实用命令行技巧
- Xcode崩溃、内存泄露检查方法
- ZOJ-1060
- EXECUTE IMMEDIATE
- iOS开发之属性列表
- 利用Camera API实现自己的拍照和摄像程序——android开发
- 博弈算法 之 SG 函数的运用
- 提高MYSQL大数据量查询的速度
- SQLite 入门, 基本操作
- 【Github教程】史上最全github使用方法:github入门到精通
- 钟南山一天就是奇思乱想 別懷疑莪
- php实现三级导航栏效果
- mysql大数据量处理