昨天在給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來取值。
好好學習,天天向上!^_^