iOS篇—plist文件

如何读取plist文件

在这里插入图片描述

方法一:

1.获取当前程序主路径下的某个文件的路径

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"];

2.读取路径里面的内容,保存的数据是什么类型就用什么类型取
二进制NSData 数组 NSArray 字典NSDictionary

NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];

3.使用数据 把编码转化为文本

NSArray *statusArray = [dic objectForKey:@"status"];

4.获取status[]数组的第一个元素 数组元素都是字典 用字典对象接收

NSDictionary *firstDic = [statusArray objectAtIndex:0];

5.获取user对应的数据 user是一个字典

NSDictionary *userDic = [firstDic objectForKey:@"user"];

6.获取name address 均为字符串

NSString *name = [userDic objectForKey:@"name"];
NSString *address = [userDic objectForKey:@"address"];

方法二:数据封装

  • 为什么封装数据?

数据太多了,保存数据都需要不不同的变量量来保存,变量与变量之前没有任何的关联, 不好管理。

  • 数据封装:

把数据封装为某一个具体的模型,比如微博的模型WeiboModel,里面有name,text,address,source等属性。

  • 数据封装的好处:

a.不用定义多个变量来保存同种类型的数据;
b.将多个没有关联的数据封装为一个整体;
c.便于访问数据,用点语法直接访问即可,如:WeiboModel.name。

  • 步骤:

1.获取数据(本地 / plist / 数据库 / 服务器)

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"];
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSArray *statusArray = [dic objectForKey:@"status"];

2.定义一个数据模型,如微博模型:WeiboModel,这个数据模型有如下特点:
a.继承于NSObject
b.数据模型⾥面只有这个模型的基本数据,没有任何与UI相关的操作
c.注意在定义数据模型的时候, 尽量让模型的属性变量名和数据源⾥面的key相对应
在这里插入图片描述
在头文件中添加属性变量:

@propertynonatomic, copy) NSString *text;
@propertynonatomic, copy) NSString *name;
@propertynonatomic, copy) NSString *address;

3.解析数据
a.在获取数据的地方对数据进⾏封装

self.modelsArray = [NSMutableArray array];
for NSDictionary *itemDic in statusArray) {     WeiBoModel *model = [[WeiBoModel alloc] init];        //获取user对应的字典NSDictionary *userDic = [itemDic objectForKey:@"user"];       //将数据赋给这个模型对象model.text = [itemDic objectForKey:@"text"];model.name = [userDic objectForKey:@"name"];model.address = [userDic objectForKey:@"address"];       //保存模型对象[_modelsArray addObject:model];
}

b.在数据模型里面对数据进行封装 写一个类方法

+ WeiBoModel *)modelWithDataDic:NSDictionary *)dic{//创建模型对象WeiBoModel *model = [[WeiBoModel alloc] init];NSDictionary *userDic = [dic objectForKey:@"user"];model.text = [dic objectForKey:@"text"];model.name = [userDic objectForKey:@"name"];model.address = [userDic objectForKey:@"address"];return model;
}
for NSDictionary *itemDic in statusArray) {WeiBoModel *mo = [WeiBoModel modelWithDataDic:itemDic];[_modelsArray addObject:mo];}

4.操作数据 ,获取第二个模型的地址

WeiBoModel *model = [_modelsArray objectAtIndex:1];
NSLog@"%@", model.address);

方法三:使用开源工具

在这里插入图片描述
两个方法

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"shop" ofType:@"plist"];
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSArray *statusArray = [dic objectForKey:@"status"];
self.modelsArray = [WeiBoModel mj_objectArrayWithKeyValuesArray:statusArray];
WeiBoModel *model = [_modelsArray objectAtIndex:0];
NSLog@"%@", model.text);
self.modelsArray = [WeiBoModel mj_objectWithFilename:@"shop.plist"];
NSLog@"%@", _modelsArray);

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注