在iOS开发中,KVC是咱们常常要使用的技术.那么KVC有什么做用呢?简单列举一下下面几种:ui
一般咱们手动将字典转模型的话,会在模型中提供一个类方法接收一个字典,在这个方法中将字典转换成模型,再将转换好的模型返回.this
+ (instancetype)statusWithDict:(NSDictionary *)dict { Status *status = [[self alloc] init]; //利用KVC字典转模型 [status setValuesForKeysWithDictionary:dict]; return status; }
分析一下[status setValuesForKeysWithDictionary:dict]
的底层实现原理编码
+ (instancetype)statusWithDict:(NSDictionary *)dict { Status *status = [[self alloc] init]; //利用KVC字典转模型 //[status setValuesForKeysWithDictionary:dict]; //setValuesForKeysWithDictionary:原理--遍历字典中全部的key,去模型中查找对应的属性,把值给模型属性赋值 [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { // 这行代码才是真正给模型的属性赋值 [status setValue:obj forKey:key]; }]; return status; }
[<Status 0x7fd439d20a60> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key source.
是系统调用了setValue:forUndefinedKey:报错.若是想解决这个问题,只须要在模型中重写对象的setValue:forUndefinedKey:,把系统的方法覆盖, 就能继续使用KVC,字典转模型了。 - (void)setValue:(id)value forUndefinedKey:(NSString *)key { }
setValue:forKey:
方法赋值的原理