ios 简单的plist文件读写操作(Document和NSUserDefaults)
最近遇到ios上文件读写操作的有关知识,记录下来,以便以后查阅,同时分享与大家。
一,简单介绍一下常用的plist文件。
全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。
Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息
二,先说文件保存到的几个位置:
1,工程沙盒里(就是程序user Document文件夹下,以读取文件,写入文件方式)
2,工程自身里(就是在工程里手动创建一个如.plist文件,把固定的内容写入,这个需要人工手动写入)
3,工程沙盒里(保存到user Document下,不过不需要读写文件,用系统的 NSUserDefaults 可以快速保存添加读取删除基本数据类型,类似于android里的Sharedpreferences )
先看截图吧
控制台输出的为工程下plist文件和沙盒文件的路径,通过截图我们可以看到,前缀都是统一的,只是到了程序的文件夹后,一个是appname.app,另一个是Documents下。所以存放位置还是不一样的。
首先说一下,工程下的.plist是我们不能在代码中写入的,可以读取,但是不可以写入(目前我是这样的结论,猜测应该是apple为了安全限制的),所以,代码中进行文件写等操作只能在沙盒路径下的文件中操作。
(程序常用固定数据,比如离线地图数据,各城市经纬度信息等需要我们绑定到程序里(比UserDocument安全),那么,可以代码循环写入,把.plist写在沙盒内,然后手动copy到工程目录下,这样就不用我们手动添加啦)
三,三种方式的读写操作。
1-1,创建plist文件。
按command +N快捷键创建,或者File —> New —> New File,选择Resource 下的Property List
1-2,工程路径plist文件读取。
- //path 读取当前程序定义好的provinces.plist省份城市文件
- NSString *path = [[NSBundle mainBundle] pathForResource:@"provinces" ofType:@"plist"];
- NSDictionary *data = [NSDictionary dictionaryWithContentsOfFile:path];
- self.provincesContent = [NSArray arrayWithArray:[data objectForKey:@"province"]];//array数组的名称就叫province
1-3,读取后赋值给我们相应的数据类型,就可以直接使用了,就是这么简单。
2-1,沙盒路径plist文件的读取。
- NSArray *patharray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *path = [patharray objectAtIndex:0];
- NSString *filepath=[path stringByAppendingPathComponent:@"provinces.plist"];//添加我们需要的文件全称
- //获取此路径下的我们需要的数据(NSArray,NSDictionary,NSString...)
- NSMutableArray *rootArray = [NSMutableArray arrayWithContentsOfFile:filepath];//注意,如果想添加新的数据,需要NSMutable类型的
2-2,如果document里没有此文件,会自动创建,读取赋值后,便可使用,同时可以add,update,和remove,具体看上面的截图,一目了然。
3-1,NSUserDefaults快速读写,利用系统提供的方法,我们可以快速保存简单数据类型,如用户登录用户名密码。
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//获取标准函数对象
- NSMutableDictionary *defaultcoordinate = [defaults objectForKey:@"default_coordinate"];//通过对象获取名称下NSMutableDictionary数据
- NSString *currentCity = [defaultcoordinate objectForKey:@"c_name"];
3-2,增删改,一看便会。
- [defaults setObject:@"kaka" forKey:@"newdata"];//添加id对象类型数据
- [defaults objectForKey:@"newdata"];//获取对象类型数据
- [defaults setDouble:2013 forKey:@"double"];//添加double类型数据
- [defaults doubleForKey:@"double"];//获取double类型数据
- [defaults setBool:NO forKey:@"BOOL"];//添加BOOL类型数据
- [defaults boolForKey:@"BOOL"];//获取BOOL类型数据
- [defaults setInteger:12 forKey:@"int"];//添加int类型数据
- [defaults integerForKey:@"int"];//获取int类型数据
- [defaults setFloat:0.23 forKey:@"float"];//添加Float类型数据
- [defaults floatForKey:@"float"];//获取float类型数据
- [defaults removeObjectForKey:@"newdata"];//删除对象数据
3-3,操作之后记得Synchronize同步操作,否则偶然会因为别的线程占大量内存而没有保存成功
- [defaults synchronize];
四,沙盒文件打开的方法:
1,可以通过 系统带的 终端工具,在bash命令行模式定位到
2,Finder菜单-前往 此时按住键盘的:option按键,就会显示出:资源库,点击进入
有关文件操作,先写到这里,更复杂的NSData或sqlite保存,以后用到,学到时再补充吧。
ios 简单的plist文件读写操作(Document和NSUserDefaults)的更多相关文章
- ios本地文件内容读取,.json .plist 文件读写
ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...
- (转)IOS之Info.plist文件简介
原文:IOS之Info.plist文件简介 http://www.apkbus.com/android-130240-1-1.html (出处: Android开发论坛 - 安卓开发论坛 - Andr ...
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- python里文件读写操作
文件读写操作一种基本操作,但是里面也存在很多需要注意的问题,例如字符编码.内存缓冲.指针位置等等.如果忽视这些问题就会引起很多不必要的麻烦.简单来说,文件的读写分为几个过程: 打开文件,并定义操作文件 ...
- Kotlin入门(27)文件读写操作
Java的文件处理用到了io库java.io,该库虽然功能强大,但是与文件内容的交互还得通过输入输出流中转,致使文件读写操作颇为繁琐.因此,开发者通常得自己重新封装一个文件存取的工具类,以便在日常开发 ...
- python 文件读写操作(24)
以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...
- Kotlin入门-文件读写操作
转 https://blog.csdn.net/aqi00/article/details/83241762 Java的文件处理用到了io库java.io,该库虽然功能强大,但是与文件内容的交互还得通 ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
随机推荐
- Java 多态,重载,重写
1.多态(polymorphism): 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象, ...
- 转:WebDriver(Selenium2) 处理可能存在的JS弹出框
在自动化测试过程中,有些情况下我们会遇到一些潜在的Javascript弹出框.(即某些条件下才会出现,不是固定出现),然后如果当这种弹出框出现,我们没有加以处理,WebDriver将无法进行下一步的操 ...
- 未能加载文件或程序集 Microsoft.VisualBasic.PowerPacks.Vs, Version=10.0.0.0 解决 亲测
项目打开winform程序做的某些窗体时报错: ************* 异常文本 ************** System.Reflection.TargetInvocationExceptio ...
- PAT乙1002
有毒,真的有毒,难题对于简单题影响太大了,想的东西太多,总会在考虑,会不会时间超限,数据量有多大,三个循环就太慢了.... 总之我是真的不愿意看到这样的程序能过的,总觉得有更好的,却总是找不更好的额. ...
- 设置自己Eclipse代码风格(内部)
http://www.cnblogs.com/farseer810/p/4391318.html 经过这几次的代码提交,发现很多人的代码风格不够规范.个人认为很有必要强制性规定一下代码的规范. 整体来 ...
- 开源内容管理系统Joomla正式发布3.5版本 基于PHP 7
这也是首个完全支持 PHP 7 语言开发的 Joomla 版本 作为深受广大站长喜爱的 Joomla 开源内容管理系统(Content Management System, CMS)正式推出 3.5 ...
- Android开发教程
http://www.cnblogs.com/liulikui/archive/2011/11/13/2247280.html 博客链接——>环境搭建
- 利用transform制作幻灯片
html代码 <html><head></head><body><div class='hpic'> <ul style=" ...
- 标准与扩展ACL实验
一标准访问控制列表实验: 实验拓扑: 实验目的:掌握标准与扩展ACL的配置 实验要求:拒绝R1到R3的所有流量 实验步骤: 步骤1 按如上拓扑做好底层配置,并检测相邻设备之间的连通性 步骤2起静态路由 ...
- UIScrollView代理方法
手拖拽后会调用 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView [scrollView setContentOffset ...