plist文件的使用

时间:2023-03-08 16:07:01

什么是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文件

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文件的使用

  • 一旦加载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/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此字段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利