字典转模型

如果创建了这样的一个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中要写到 以上提及的两个方法 喔😯~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容