我收到以下错误
-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x3c168090
在这行代码上
cell.offerTitle.text = [voucherData objectForKey:@"offer_title"];
有人可以帮我解决问题吗?
由于 奥利弗
答案 0 :(得分:6)
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;
答案 1 :(得分:0)
此处最佳做法的一个候选人是使用isEqual:
,而不是isEqualToString:
。这样,如果你得到的不是一个字符串,你将不会得到错误,并且相等测试将失败。
另一方面,你可以说isEqualToString:
是一个不错的选择,因为当你得到的不是一个字符串时,你会收到一个错误提醒你这个问题!
isEqualToString:
消息来自UIKit,而不是来自OP自己的代码。
答案 2 :(得分:0)
我为诺亚的回答做了一些改变
-(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];
答案 3 :(得分:-1)
来自控制台的那一行可能告诉您“voucherData
”不是您认为的“NSDictionary
”对象。
同时确保您的单元格中的“offerTitle
”也是有效的UITextField
。