昨天在给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来取值。
好好学习,天天向上!^_^