前言
最近項目中因為數據問題,導致了KVC由字典轉數據model時產生了崩潰,原因是后臺返回的數據中存在key對應的value為空,導致了重寫的setNilValueForKey方法拋出異常。
模擬Crash
{
name = null;
age = 24;
}
在OC中模擬的話可以將value設置為[NSNull null];
調用setValuesForKeysWithDictionary修改Model中對應key的屬性,將字典類型數據轉化為model。此時如果model類中未重寫setNilValueForKey方法系統將拋出以下類似錯誤:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '[<People 0x100200080> setNilValueForKey]: could not set nil as the value for the key name.'
所以我們需要再model類中重寫setNilValueForKey方法,為value為空的key設置默認值,也可以不做處理。
我們定義的model中已經重寫了setNilValueForKey方法,但多寫了一句話:調用了父類的這個方法:[super setNilValueForKey:key],同樣引起了Craash??????
- (void)setNilValueForKey:(NSString *)key
{
[super setNilValueForKey:key];
}
刪除[super setNilValueForKey:key]就可以正常運行了,這個問題隱藏了好久,疏忽了??