如果创建了这样的一个plist。app.plist
其根为array,items为dictionary,包含string类型。
那么一开始写
1、
@property(nonatomic, strong) NSArray *apps;
- (NSArray *)apps
{
if(_apps == nil){
//加载数据
//1、获取app.list文件在手机上的路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
//2、根据路径加载数据 plist类型是array
_apps = [NSArray arrayWithContentsOfFile:path];
}
return _apps;
}
现在开始转模型方式
2、
可以先新建一个cocoa touch class 命名最好有个小前缀例如LWApp,继承自NSObejct
LWApp.h中有几个模型属性取决于plist中items下有几个键值 属性名和键名最好最好一样
@interface LWApp : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *icon;
此时ViewController.m中改为
- (NSArray *)apps
{
if(_apps == nil)
{
//加载数据
//1、获取app.list文件在手机上的路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
//2、根据路径加载数据 plist类型是array
NSArray *arrayDict = [NSArray arrayWithContentsOfFile:path];
//arrayDict这个数组中存的是一个个的字典
//3、创建一个可变数组用来保存一个一个的对象
NSMutableArray *arrayModels = [NSMutableArray array]; //创建了一个空的可变数组
//4、循环字典数组,把每个字典对象转换成一个模型对象
for (NSDictionary *dict in arrayDict) { //循环arrayDict把里面每个变量复制给dict
//创建一个模型
LWApp *model = [[LWApp alloc]init];
model.name = dict[@"name"];
model.icon = dict[@"icon"];
//把模型添加到arrayModel中
[arrayModels addObject:model];
}
_apps = arrayModels; //这样_apps中就是模型对象
}
return _apps;
}
(记得载入头文件
这样写后_apps里都是模型对象啦 不是dictionary
但是这样写还是不够好。
继续改写。
3、
ViewController.m中
//4、循环字典数组,把每个字典对象转换成一个模型对象
for (NSDictionary *dict in arrayDict) { //循环arrayDict把里面每个变量复制给dict
//创建一个模型
// LWApp *model = [[LWApp alloc]init];
// model.name = dict[@"name"];
// model.icon = dict[@"icon"];
LWApp *model = [LWApp appWithDict:dict];
//把模型添加到arrayModel中
[arrayModels addObject:model];
}
_apps = arrayModels; //这样_apps中就是模型对象
LWApp.h中
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *icon;
-(instancetype) initWithDict:(NSDictionary *)dict;
+(instancetype) appWithDict:(NSDictionary *)dict;
@end
LWApp.m中
//如果写(LWApp *)就相当于把返回值写死啦,而且如果有子类继承,会把这个方法一起继承喔,子类就不会返回子类的类型,返回的是父类的类型,所以这里我们用(instancetype) 它表示在哪个子类下就是哪个指针类型,返回哪个子类喔。
- (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];
}
转模型时候要封装在LWApp.h中要写到 以上提及的两个方法 喔😯~