您的位置:首页 > 其它

KVC字典转模型以及常见错误解决(接上昨晚的自动生成属性)

2016-06-12 10:24 513 查看

接上昨晚的数据源继续用,然后将自动生成的属性贴在模型中

# .h 文件中是属性(就不用我写了吧  T_T)
#模型的属性名跟字典 -- 一 一对应
// 属性

// 定义一个类方法进行字典转模型
+ (__kindof Model *)modelWithDict:(NSDictionary *)dict;
#

# .m 文件中
+ (__kindof Model *)modelWithDict:(NSDictionary *)dict{
Model *model = [[Model alloc] init];
// 对的,你没有看错,一个KVC方法就OK了,前提是,你的模型属性必须与字典一一对应。
[model setValueForKeysWithDictionary:dict];

return model;
}


#viewController中
NSMutableArray *models = [NSMutableArray array];
for (NSDictionary *dict in dictArr){
// 字典转模型(别忘记导入model类)
Model *modle = [Model modelWithDict:dict];

[models addOBject:model];
}
NSLog(@"%@",models);


途中会报的错误

//1.也许你的某个dict里面有一些其他dict没有的字段,没有在6/10的方法中读取出来
//因为昨天的方法是只会去读你传进去的那一个dict,这时你只需要找到那个特有的字段,加载model属性中就可以了。

//2.当你在6/10的方法中读取出来的属性中存在系统的关键字时候,或者后台返回给你的字段不是你想要的。那么你需要知道下面的这个方法。

#在model.m文件中重写系统的报错方法
// 解决KVC报错
- (void)setValue:(id)value forUNdefinedKey:(NSString *)key{
// key :代表没有找到的key(也就是关键字/不是你想要的字段名)
// value:key对应的值

// 用自己想要的属性名代替不想要的key
//下面那张图片是报关键字id错误,在model类中用_ID代替
if([key isEqualToString:@"id"]){
_ID = [value integerValue];
}
NSLog(@"%@ --- %@",key ,value);
}




这里就结束了,明天再跟进用runtime实现。晚安,好梦。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: