【iOS報錯】“this class is not key value coding-compliant for the key userPhoneNum”給字典設定鍵值對的時候報錯

苜蓿九少發表於2017-12-13

昨天在給FMDB二次封裝的時候,當封裝查詢方法的時候,出現了這個報錯:

【iOS報錯】“this class is not key value coding-compliant for the key userPhoneNum”給字典設定鍵值對的時候報錯
報錯資訊

一、原始程式碼:


【iOS報錯】“this class is not key value coding-compliant for the key userPhoneNum”給字典設定鍵值對的時候報錯
原始程式碼

當時也是懵逼了,不明所以,查了一些資料,不過大部分都是介紹說是在xib檔案設定的時候由於沒有關聯引起的,但是實際上我這邊卻是在給字典設定值的時候出現了這個報錯。

之後由於自己的不仔細檢視錯誤資訊以及基礎知識點概念的模糊,一直沒有找到解決的方案。

而在今天和詢問朋友後才發現原來是自己基礎點就搞錯了,忘了字典的屬性了。

二、程式碼說明:


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

該方法是NSObject繼承於NSKeyValueCoding協議,所以只要是繼承NSObject的都會有這個方法。但是當字典設定這個方法時卻是給字典新增鍵值對的。而NSDictionary是不可變字典,只可以固定更改對應已存在key的值,而不可以是新增鍵值對;而NSMutableDictionary則是可變字典,可向其新增新的鍵值對,則可以使用該方法進行新增。所以只需要將字典的屬性有不可變改為可變即可。

注:被這麼基礎的東西搞糊塗了,也真是醉了,只怪自己沒有好好學習基礎知識。大家一定要學好基礎呀!

三、改正後的程式碼:


【iOS報錯】“this class is not key value coding-compliant for the key userPhoneNum”給字典設定鍵值對的時候報錯
改正後的程式碼

四、補充:


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來取值。    


好好學習,天天向上!^_^

相關文章