在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:
方法賦值的原理