文档章节

iOS数据持久化——属性列表

kinglin_fu
 kinglin_fu
发布于 2016/01/29 16:15
字数 820
阅读 92
收藏 0

###1、属性列表(plist) iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,并且只能保存NSDictionary、NSArray、NSString、NSNumber、Boolean、NSData、NSDate 类型的数据。将这些类型的数据保存为plist格式文件,该格式保存的数据可以直接使用NSDictionary和NSArray读取。

  • ####1.1 手动添加plist文件

    • #####创建文件: 新建文件-->Resource-->Property List 输入图片说明

    • #####添加数据: plist文件的根类型只能是NSArray或NSDictionary 输入图片说明 输入图片说明

    • #####读取数据: 将plist文件中的数据读入对应的根类型

    	   // 1、获取文件所在的路径,Resource:文件名称、Type:文件格式
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"userInfos" ofType:@"plist"];
    
    // 2、从路径中获取对应格式的数据
    
    // 如果Root为NSArray,则使用数组保存
    NSArray *infos = [NSArray arrayWithContentsOfFile:filePath];
    NSLog(@"%@",infos);
    
    // 如果Root为NSDictionary,则使用字典保存
    NSDictionary *infoDic = [NSDictionary dictionaryWithContentsOfFile:filePath];
    NSLog(@"%@",infoDic);
    
  • ####1.2 使用NSUserDefaults保存为pist文件 iOS中除了手动添加plist文件外,还提供了 NSUserDefaults 类来将数据保存为plist文件。NSUserDefaults 将自动生成plist文件,该文件保存在沙盒目录中的Library/Preferences目录中。

    • #####创建NSUserDefaults对象 NSUserDefaults是一个单例对象,项目中每次使用都是同一个。也就是说使用NSUserDefaults 保存的数据都是在同一个plist文件中,所有使用时要注意。
     NSUserDefaults *deaults = [NSUserDefaults standardUserDefaults];
    	```	
    
    	* #####设置保存数据
    	NSUserDefaults 生成的plist的Root是字典类型,所有数据都是以键值对的方式设置的,保存的数据类型也只能是plist文件支持的数据类型,所以不能保存自定义的数据类型。
    
    

    // 保存对象类型数据 [deaults setObject:@"保存的字符串" forKey:@"string"]; [deaults setObject:@100 forKey:@"number"]; NSArray *array = @[@1,@2,@3,@4]; [deaults setObject:array forKey:@"array"]; NSDictionary *dic = @{@"key1":@"value1",@"key2":@"value2"}; [deaults setObject:dic forKey:@"dic"];

    // 保存基本类型数据,最终在plist中保存的是NSNumber类型。 [deaults setBool:YES forKey:@"bool"]; [deaults setInteger:100 forKey:@"integer"]; [deaults setDouble:3.33333 forKey:@"double"]; [deaults setFloat:3.15 forKey:@"float"];

    
    	* #####读取保存的数据
    	因为 NSUserDefaults 保存的Root为字典,所有取值时根据对应的键去取值。不管之前保存的类型是可变或者是不可变,读取出来的数据类型都是不可变的了。
    
    

    NSString *str = [deaults objectForKey:@"string"]; NSArray *arr = [deaults objectForKey:@"array"];

    
    	* #####移除保存的数据
    
    

    [deaults removeObjectForKey:@"string"]; [deaults removeObjectForKey:@"array"];

    
    	* #####同步数据
    	每次使用 NSUserDefaults 添加、修改或者删除数据后都需要对数据同步,防止数据没有及时更新,操作如下:
    
    

    [deaults synchronize];

    
    
  • ####1.3 直接将数据写入plist文件 常用的Foundation类(NSString、NSArray、NSDictionary等)都有一个writeToFile:atomically: 方法,用于将数据持久保存到指定的文件中。

    	// 1、创建文件保存的文件路径
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];
    
    // 2.设置数据
    NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
    [userInfo setObject:@"张三" forKey:@"userName"];
    [userInfo setObject:@"123456789" forKey:@"userPass"];
    [userInfo setObject:@"13577893212" forKey:@"tel"];
    
    // NSArray *infos = @[@100,@200,@300,@400];
    
    // 3.将数据写入文件
    [userInfo writeToFile:filePath atomically:YES];
    
    //[infos writeToFile:filePath atomically:YES];
    

© 著作权归作者所有

kinglin_fu
粉丝 16
博文 11
码字总数 14320
作品 0
石景山
私信 提问
浅谈iOS开发中的对象归档

iOS提供的数据持久化方式有:SQLiteCoreData属性列表、NSUserDefault对象归档。 这里来简单介绍下iOS开发中的对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化...

泊菜
2014/11/27
3.9K
8
如果只有一个月的时间学 iOS 开发,我们该做些什么?

一年前,我还是一个 Android 开发者。那时候我没有任何 iOS 编程相关的知识,我甚至没用过任何苹果的产品。然而,这已成为过去,现在我已经能同时开发 iOS 和 Android 应用了。 现在,我想给...

oschina
2017/03/09
3.3K
13
使用 Windows Bridge for iOS 构建 app

欢迎你阅读针对Windows Bridge for iOS上手系列博客的第一篇文章。Windows Bridge for iOS 是一个开发源代码项目,你可以用它来创建Windows平台上统一的(UWP)应用,这些app可以运行于Windows...

巴拉迪维
2016/01/26
3.5K
13
iOS应用数据存取之数据库存储-----Core Data

iOS应用数据存取的常用方式有如下几种XML属性列表 —— PListNSKeyedArchiver 归档Preference(偏好设置)SQLite3Core Data 现在我想记录以下我对core Data的认识存在理由:苹果公司为了关照...

哥特复心
2014/01/08
0
2
OSC 第 76 期高手问答 — iOS 性能优化&数据持久化

OSCHINA 本期高手问答 ( 5月27日- 6月2日) 我们请来了@智捷课堂(关东升)为大家解答关于 iOS 性能优化和数据持久化 方面的问题。 关东升,智捷课堂创始人,国内知名 iOS 技术作家,iOS 技术...

叶秀兰
2015/05/27
4.1K
28

没有更多内容

加载失败,请刷新页面

加载更多

Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
48分钟前
1
0
由于PostgreSQL9.x二进制输出格式默认值改变导致的读取图片错误

今天从社区邮件看到一个这样的问题,感觉很有意思,在这分享给大家~具体如下: 问题现象: 作者有一个很老的Java应用,当时后端采用的PostgreSQL数据库版本为8.x,该系统除了正常的数据增删...

闻术苑
今天
2
0
导入sql时出现Invalid default value for 'create_time'报错处理方法

当运行SQL会出现:[Err] 1067 - Invalid default value for 'create_time',是因为Mysql版本不同,如果版本不 < 5.6请去的话报错的处理方法如下: 方法 :alter table table_name modify cre......

writeademo
今天
1
0
对ssm(spring,springmvc,mybatis)的了解总结

ssm框架现在是java web开发的三个主流框架 ,其实严格来算只算是两个框架,因为springmvc属于spring框架 ,是spring的一个mvc子框架 那么我们下面就来了解一下三大框架把 一 .Spring spring...

咸鱼-李y
今天
2
0
聊聊Elasticsearch的FsProbe

序 本文主要研究一下Elasticsearch的FsProbe FsProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/fs/FsProbe.java public class FsProbe { private static f......

go4it
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部