前言
最近项目中因为数据问题,导致了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: '[ 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]就可以正常运行了,这个问题隐藏了好久,疏忽了