開發(fā)中經(jīng)常會用model 進行傳值,但是有時候直接用解析的字典也很方便那么什么時候用model呢? 個人理解 需要在本地做數(shù)據(jù)狀態(tài)變化的用model 比較方便(比如需要對一個列表中的model進行單選或多選操作時)
而如果只是對數(shù)據(jù)進行展示 直接用字典進行賦值就ok 了
iOS 中怎么把字典轉(zhuǎn)化為model 呢個人覺得KVC 是很方便的下面簡單說一下如何利用KVC 進行字典和model 的轉(zhuǎn)化
字典類型
NSDictionary *dic = @{@"id":@"123",
@"corpid":@"hs",
@"corpName":@"shhs",
@"userid":@"nmf",
@"maker":@"zq",
@"status":@"草擬"};
創(chuàng)建一個和字典對應的model 類 屬性名需要和字典的key 值一致,由于id 是預留字段我們無法添加一個名為id 的屬性,現(xiàn)在先用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; // 除了字典中包含的字段外還可以根據(jù)需要自己在model 中添加需要的字段
@end
在CorpModel 中要實現(xiàn)兩個方法
-(instancetype)initWithDic:(NSDictionary *)dic ;
+(instancetype)corpObjectWithDic:(NSDictionary *)dic;
方法的實現(xiàn)
+(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 ;
}
當你在外部調(diào)用corpObjectWithDic:方法時內(nèi)部會調(diào)用initWithDic 的方法返回一個model 對象
對于特殊字段的處理 實現(xiàn)以下方法
//
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
if ([key isEqualToString:@"id"]) {
self.serialid = value ;
}
}