plist文件的使用
什么是plist文件
直接将数据写在代码里面,不是一种合理的做法。如果经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低
因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码
一般可以使用属性列表文件存储
NSArray
或者NSDictionary
之类的数据,这种 属性列表文件 的扩展名是plist,因此也称为plist文件
plist文件的使用
原来代码:
先声明好了一个数组:
@property (nonatomic,strong) NSArray *shops;
在viewDidLoad
中加载数组:
self.shops = @[
@{
@"icon":@"单肩包",
@"name":@"单肩包"
},
@{
@"icon":@"链式包",
@"name":@"链式包"
},
@{
@"icon":@"手拿包",
@"name":@"手拿包"
},
@{
@"icon":@"手提包",
@"name":@"手提包"
},
@{
@"icon":@"双肩包",
@"name":@"双肩包"
},
@{
@"icon":@"斜挎包",
@"name":@"斜挎包"
}
];
修改代码:
1.新建一个plist
文件
- Root为文件的根节点,Root是什么类型,将来加载出来的就是什么类型。
- 字典里放着name和icon两个key值,即图片和图片名。
2.此处类型为Array
,加载出来后就是NSArray
对象,因此创建一个NSArray
类型的对象
// 创建文件路径
NSString *file = @"";
// 创建NSArray对象
[NSArray arrayWithContentsOfFile:file];
- 凡是参数名为File的,传递的都是全路径
3.创建一个NSBundle
对象来关联一个资源包
NSBundle *bundle = [NSBundle mainBundle];
- 一个NSBundle对象对应一个资源包(图片、音乐、视频、plist等文件)
NSBundle
的作用:用来访问与之对应的资源包内部的文件,可以获得文件的全路径- 项目中添加的资源都会被添加到主资源包中,
mainBundle
关联的就是项目的主资源包
4.利用mainBundle
获得plist文件在主资源包中的全路径
NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
或者
NSString *file = [bundle pathForResource:@"shops.plist" ofType:nil]
- 第一个参数传文件的文件名,第二个参数传文件的扩展名
5.最后,代码改为:
// 加载plist数据
NSBundle *bundle = [NSBundle mainBundle];
NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
self.shops = [NSArray arrayWithContentsOfFile:file];
plist文件解析
- 一旦加载plist,首先看根对象是什么
- 此处根对象就是个数组,因此会生成一个对应的数组对象
- 数组里面有字典,因此字典会生成一个
NSDictionary
- 因此数组读出来就是 数组里面有字典,字典里面有name和icon两个key
plist文件使用常见问题
项目里面的某个.m文件无法使用
- 检查:Build Phoses -> Complie Sources
项目里面的某个资源文件(比如plist、音频等)无法使用
- 检查:Build Phoses -> Copy Bundle Resources
添加plist文件的时候,无论plist在哪个文件夹里,都不能叫Info
作者:黎明豌豆
出处:http://www.cnblogs.com/PeaZora/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此字段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
plist文件的使用的更多相关文章
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
- ios开发之Info.plist文件相关配置
前言:在iOS开发中有些情况下需要对Info.plist文件进行配置,以下介绍几种相关配置.以后遇到需要配置的再更新... 开发环境:swift3.0.1,Xcode8.1 一,项目中需要使用第三方字 ...
- Excel文件转plist文件出现的文件编码问题
今天在测试时遇到了需要将大量整理好的Excel数据转换为plist文件的情况.百度了一下教程,发现虽然别人也遇到过类似的情况,但是有些讲的还是不够细致.所以做如下整理. 百度到的内容中有使用Mes ...
- IOS学习笔记之获取Plist文件读取数据
@property(nonatomic,strong) NSArray *pic; //创建数组属性 @property(nonatomic,assign) int index; //创建索引属性 @ ...
- plist文件的读取和xib加载cell
plist 文件读取 例如在工程里倒入了plist文件 在工程里需要用到plist文件里的信息,就需要把plist文件读取出来. 如程序: -(NSArray *)moreDataArr{ if (! ...
- plist文件
1.一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件” 2.接下来通过代码来解析Plist文件中的 ...
- Reveal分析IOS界面,plist文件读取
Reveal分析IOS界面,需要得到app的 softwareVersionBundleId上传到iphone中 , 而IOS8的iTunesMetadata.plist (设备路径/var/mobi ...
- iOS开发——UI基础-懒加载,plist文件,字典转模型,自定义view
一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控 ...
- iOS,plist文件、pct文件,工程设置
1.使用pch文件 2.在info.plist中配置URL Schemes 3.plist配置拍照界面,复制,粘贴等菜单的显示语言 显示中文 4.使用非ARC库/ARC库 5.链接选项-Objc &a ...
随机推荐
- JSON简介以及用法汇总
什么是JSON? JavaScript 对象表示法(JavaScript Object Notation). JSON是一种轻量级的数据交换格式,某个JSON格式的文件内部譬如可以长成这样: { &q ...
- Android编译报Errors running builder 'Android Pre Compiler' on project 'XXX' java.lang.NullPointerException
编译android时,遇到报错:Errors occurred during the build.Errors running builder 'Android Pre Compiler' on pr ...
- ASP.NET - SqlSugar ORM框架 更新列表
以后SqlSugar所有更新都会在这个贴子更新 SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSug ...
- 自定义圆形控件RoundImageView并认识一下attr.xml
今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认为,多一种解决方式,就多一种举一反三的学 ...
- 深入理解计算机系统(1.2)---hello world的程序是如何运行的
在写本章的内容之前,LZ先做个小广告.其实也不算是什么广告,就是LZ为了和各位猿友交流方便,另外也确实有个别猿友留言或者在博客里发短消息给LZ要联系方式.因此LZ斗胆建立了一个有关<深入理解计算 ...
- Altera SoC与Matlab的联合---第一步 软件安装与硬件测试
参考设计:http://cn.mathworks.com/help/hdlcoder/examples/getting-started-with-hardware-software-codesign- ...
- app状态监听广播
手机中的应用在安装.更新和卸载时都会发送广播 清单文件 <?xml version="1.0" encoding="utf-8"?> <man ...
- CSS3 GRID LAYOUT
CSS3 GRID LAYOUT http://www.w3cplus.com/blog/tags/356.html 中国首个开源 HTML5 跨屏前端框架 http://amazeui.org/
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...
- MVC认知路【点点滴滴支离破碎】【三】----IIS7.5上部署MVC4.0
发布web到iis不能运行Google ----- ╲ http://stackoverflow.com/questions/12057540/installing-asp-net-mvc-4-o ...