如何读取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 / 数据库 / 服务器)
扫描二维码关注公众号,回复:
5617284 查看本文章
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相对应
在头文件中添加属性变量:
@property(nonatomic, copy) NSString *text;
@property(nonatomic, copy) NSString *name;
@property(nonatomic, 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);