开发中经常会用model 进行传值,但是有时候直接用解析的字典也很方便那么什么时候用model呢? 个人理解 需要在本地做数据状态变化的用model 比较方便(比如需要对一个列表中的model进行单选或多选操作时)
而如果只是对数据进行展示 直接用字典进行赋值就ok 了
iOS 中怎么把字典转化为model 呢个人觉得KVC 是很方便的下面简单说一下如何利用KVC 进行字典和model 的转化
字典类型
NSDictionary *dic = @{@"id":@"123",
@"corpid":@"hs",
@"corpName":@"shhs",
@"userid":@"nmf",
@"maker":@"zq",
@"status":@"草拟"};
创建一个和字典对应的model 类 属性名需要和字典的key 值一致,由于id 是预留字段我们无法添加一个名为id 的属性,现在先用serialid 来代替它
#import <Foundation/Foundation.h>
@interface CorpModel : NSObject
@property(nonatomic,strong)NSString *serialid;
@property(nonatomic,strong)NSString *corpid;
@property(nonatomic,strong)NSString *corpName;
@property(nonatomic,strong)NSString *userid;
@property(nonatomic,strong)NSString *maker;
@property(nonatomic,strong)NSString *status;
@property(nonatomic,assign)bool is select; // 除了字典中包含的字段外还可以根据需要自己在model 中添加需要的字段
@end
在CorpModel 中要实现两个方法
-(instancetype)initWithDic:(NSDictionary *)dic ;
+(instancetype)corpObjectWithDic:(NSDictionary *)dic;
方法的实现
+(instancetype)corpObjectWithDic:(NSDictionary *)dic{
CorpModel *model = [[self alloc]initWithDic:dic];
return model ;
}
-(instancetype)initWithDic:(NSDictionary *)dic{
if (self = [super init]) {
[self setValuesForKeysWithDictionary:dic];
}
// 自己在model中添加的字段无法通过setValuesForKeysWithDictionary 进行赋值要在初始化时定义初值
self.isselect = NO ;
return self ;
}
当你在外部调用corpObjectWithDic:方法时内部会调用initWithDic 的方法返回一个model 对象
对于特殊字段的处理 实现以下方法
//
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
if ([key isEqualToString:@"id"]) {
self.serialid = value ;
}
}