文 || 張贺
-
setValuesForKeysWithDictionary的底层实现:
遍历字典中的所有Key,去模型中查找有没有对应的属性名,如果就给这个属性赋值。+ (instancetype)flagWithDict:(NSDictionary *)dict { Flag *flag = [[self alloc] init]; // [flag setValuesForKeysWithDictionary:dict]; // KVC // setValuesForKeysWithDictionary底层实现: // 遍历字典中的所有Key,去模型中查找有没有对应的属性名,如果就给这个属性赋值 [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { // 给模型的key属性名赋值value [flag setValue:obj forKey:key]; }]; return flag; }
[flag setValue:obj forKey:key];
也是一个KVC。
-
setValue:forKey:
底层实现:(字典中有icon:touxiang.jpg)
1.首先去模型中查找有没有setIcon方法,如果有,就直接调用[flag setIcon:@"touxiang.jpg"]
2.继续去模型中查找有没有icon属性,如果有,就直接访问成员属性icon = @"touxiang.jpg"
3.继续去模型中查找有没有_icon属性,如果有,就直接访问成员属性_icon = @"touxiang.jpg"
4.找不到,就直接报错.[flag setValue:forUndefinedKey:]
-
setValuesForKeysWithDictionary报错:
如果字典中存在模型里没有的key,程序就会崩溃:
Snip20160802_1.png
解决办法是在模型中实现
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
}
2016.8.2
网友评论