开发中使用字典的坏处,最明显的就是plist文件中key名,需要手动敲出来,并且编译器不会报错。我在有一次项目打错了key,查了好久的错,结果才发现是这个初学者才会犯的错误。
如果要用请务必打开该plist的副本,粘贴复制。
因为该缺陷我们引入的模型的概念,大致的思路是
plist➡️字典数组➡️模型数组
model必须实现的
1.字典转模型的过程最好封装在模型内部
2.模型应该提供一个可以传入字典参数的构造方法
3.返回数据
代码如下
model类(假使plist中的key名有两个name,和icon)
#import <Foundation/Foundation.h>
@interface MyModel : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *icon;
-(instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)appWithDict:(NSDictionary *)dict;
@end
#import "MyModel.h"
@implementation MyModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
//字典转模型的过程
if (self = [super init]) {
self.name = dict[@"name"];
self.icon = dict[@"icon"];
}
//返回数据
return self;
}
//为了更好的协作
+ (instancetype)appWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
@end
获取plist,并将数据传给model类。
- (NSArray *)app{
if (_apps == nil) {
//获得plist全路径
NSString *path = [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
//做个遍历将dictArray所有字典转成模型对象放到新的数组中
NSMutableArray *Apparray = [NSMutableArray array];
for (NSDictionary *dict in dictArray) {
// MyModel *app = [[MyModel alloc]initWithDict:dict];
MyModel *app = [MyModel appWithDict:dict];
[Apparray addObject:app];
}
_apps =Apparray;
}
return _apps;
}
然后可以验证啦
[self app];
for (int index = 0; index<10; index++) {
MyModel *modelInfo = self.apps[index];
NSString *modelName = modelInfo.name;
NSString *modelIcon = modelInfo.icon;
}
//打上断点或者打印一下观察一下是否正常输出