1

我收到以下错误

-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x3c168090

在这行代码上

cell.offerTitle.text = [voucherData objectForKey:@"offer_title"];

有人可以帮我纠正这个问题吗?

谢谢奥利弗

4

4 回答 4

6

voucherDataNSDictionary 吗?

你的字典中可能有一个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;
于 2012-12-05T16:36:44.800 回答
0

这里最佳实践的一个候选者是使用isEqual:,而不是isEqualToString:. 这样,如果你得到的不是一个字符串,你就不会得到一个错误,并且相等性测试会以良好的顺序失败。

另一方面,您可能会争辩说这isEqualToString:是一个不错的选择,因为当您得到的不是字符串时,您会收到一个警告您该问题的错误!

编辑:但那是错误的;请参阅下面的评论。该isEqualToString:消息来自 UIKit,而不是来自 OP 自己的代码。

于 2012-12-05T17:14:58.183 回答
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];
于 2013-11-28T15:12:10.750 回答
-1

控制台中的那一行可能会告诉您“ voucherData”不是NSDictionary您假设的“”对象。

还要确保offerTitle您的单元格中的“”也是有效UITextField的。

于 2012-12-05T16:26:17.920 回答