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 / 数据库 / 服务器)

扫描二维码关注公众号,回复: 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);

猜你喜欢

转载自blog.csdn.net/weixin_43733988/article/details/88366616
今日推荐