iOS Crash: KVC键值编码

前言

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

你可能感兴趣的:(iOS Crash: KVC键值编码)