我收到這條線以下的代碼錯誤NSNull isEqualToString問題隨着JSON響應
-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x3c168090
cell.offerTitle.text = [voucherData objectForKey:@"offer_title"];
有人能幫助我解決這個問題嗎?
感謝 奧利弗
我收到這條線以下的代碼錯誤NSNull isEqualToString問題隨着JSON響應
-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x3c168090
cell.offerTitle.text = [voucherData objectForKey:@"offer_title"];
有人能幫助我解決這個問題嗎?
感謝 奧利弗
是voucherData
是一個NSDictionary?
您的字典中可能有NSNull
,當字典試圖找到offer_title
的對象時,它會遇到麻煩。
另一種可能性是,[voucherData objectForKey:@"offer_title"]
返回[NSNull null]
,並且當您嘗試傳遞該標籤而不是字符串時,該標籤正在被戳穿。
嘗試在objc_exception_throw
中設置斷點並讀取堆棧跟蹤 - 這會讓您更好地瞭解正在發生的事情。
補充:
id value = [voucherData objectForKey:@"offer_title"];
if ([value isKindOfClass:[NSNull class]])
cell.offerTitle.text = @"";
else
call.offerTitle.text = value;
或
這裏的最佳實踐id value = [voucherData objectForKey:@"offer_title"];
cell.offerTitle.text = [value isKindOfClass:[NSNull class]] ? @"" : value;
嗨,voucherData是一個NSDictionary,它是一個來自網絡的JSON響應。 – ORStudios
在運行代碼的下一部分之前,我將如何去檢查一個NSULL,正如你所提到的那樣。 – ORStudios
添加代碼。但實際上,爲了解決這樣的問題,您應該設置斷點並讀取堆棧跟蹤,以便在發佈之前自行診斷或解決問題。任何比這更復雜的事情都很難僅憑直覺進行調試。 – paulmelnikow
什麼從控制檯該行很可能告訴你的是,「voucherData
」不是「NSDictionary
」的對象,你認爲它是。
另外請確保您的手機中的「offerTitle
」也是有效的UITextField
。
如果voucherData爲null,則會返回無聲的'nil'。這不是Java。 – 2012-12-05 16:27:51
錯誤是關於'-isEqualToString:',而不是'-objectForKey:'。 – paulmelnikow
一位候選人是使用isEqual:
,不isEqualToString:
。這樣,如果你得到的不是一個字符串,你不會得到一個錯誤,平等測試將會失敗。
另一方面,你可能會認爲isEqualToString:
是一個不錯的選擇,因爲當你得到的不是一個字符串時,你有一個錯誤提醒你這個問題!
編輯:但是這是錯的;請參閱下面的評論。 isEqualToString:
消息來自UIKit,而不是來自OP自己的代碼。
這在這裏是不可能的,因爲調用是在UIKit中,而不是OP的代碼。 – paulmelnikow
非常好的一點。事實上,我發生了一些非常類似的事情,它也是在UIKit中,而不是我的代碼。所以我的回答是錯誤的。我會把它留在這裏(編輯),以防我的錯誤對別人有幫助。 – matt
我做出一些改變了NOA的回答
-(NSDictionary*)safeData:(NSDictionary*)dict{
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:dict];
NSArray *keys = dictionary.allKeys;
for (int i = 0; i < keys.count; i++){
id value = [dictionary objectForKey:[keys objectAtIndex:i]];
// you can add recursive here
value = [value isKindOfClass:[NSNull class]] ? @"" : value;
[dictionary setObject:value forKey:[keys objectAtIndex:i]];
}
return dictionary; }
,並使用
dictionary = [self safeData:dictionary];
是什麼voucherData? –
從它的樣子,我懷疑你的字典中的某個鍵是某種原因的'NSNull'對象,在嘗試檢索這個對象之前檢查字典中的所有鍵 –
嗨,我該如何去檢查上述關鍵首先是這樣做的!=無? – ORStudios