【iOS报错】“this class is not key value coding-compliant for the key userPhoneNum”给字典设置键值对的时候报错

439 阅读2分钟

昨天在给FMDB二次封装的时候,当封装查询方法的时候,出现了这个报错:


报错信息

一、原始代码:



原始代码

当时也是懵逼了,不明所以,查了一些资料,不过大部分都是介绍说是在xib文件设置的时候由于没有关联引起的,但是实际上我这边却是在给字典设置值的时候出现了这个报错。

之后由于自己的不仔细查看错误信息以及基础知识点概念的模糊,一直没有找到解决的方案。

而在今天和询问朋友后才发现原来是自己基础点就搞错了,忘了字典的属性了。

二、代码说明:


[dict setValue:(nullable id) forKey:(nonnull NSString *)];

该方法是NSObject继承于NSKeyValueCoding协议,所以只要是继承NSObject的都会有这个方法。但是当字典设置这个方法时却是给字典添加键值对的。而NSDictionary是不可变字典,只可以固定更改对应已存在key的值,而不可以是新增键值对;而NSMutableDictionary则是可变字典,可向其添加新的键值对,则可以使用该方法进行添加。所以只需要将字典的属性有不可变改为可变即可。

注:被这么基础的东西搞糊涂了,也真是醉了,只怪自己没有好好学习基础知识。大家一定要学好基础呀!

三、改正后的代码:



改正后的代码

四、补充:


1、setValue:forkey:与property

对于字典而言:

      是给值添加唯一标签,从而方便识别。可以理解为,value是主因,只有有了value才会添加key的唯一标签。

对于property而言:

      是对创建的属性进行赋值。可以理解为,只有当有了property属性,即key;才会有赋值,即value。


2、setValue:forkey: 与 setObject:forkey:的区别:

setValue:forkey:

(1)value值可以为nil,但是当value为nil的时候,会自动调用removeObject:forkey:方法;

(2)key只能够是NSString类型。

setObject:forkey:

(1)value是不能够为nil的,否则会报错;

(2)key可以是任何类型的。如果key是以“@”开头的,如NSDictionary类型,建议只用ObjectForkey来取值。    


好好学习,天天向上!^_^