NSNull isEqualToString:ObjC上无法识别的选择器

时间:2013-10-19 14:42:32

标签: ios objective-c string

我的代码是这样的:

我有两个字符串,place and date.我正在使用它们:

cell.datePlace.text= [NSString stringWithFormat:@"%@, %@",date,place];

在某些条目中,输出如下:

"21/10/2012, <null>"
"21/11/2012, None"
"21/12/2013, London"

我的应用程序没有崩溃,但我希望这个地方只有在不为空且不等于无时才可见。

所以我尝试了这个:

 NSString * place=[photo objectForKey:@"place"];


if ([place isEqualToString:@"None"]) {
                cell.datePlace.text= [NSString stringWithFormat:@"%@",date];
            } else {
                cell.datePlace.text= [NSString stringWithFormat:@"%@, %@",date,place];
            }

问题是当地方<null>我的应用程序崩溃时出现了这个错误:

[NSNull isEqualToString:] unrecognized selector send to instance

所以,我试过这个:

if (place) {
            if ([place isEqualToString:@"None"]) {
                cell.datePlace.text= [NSString stringWithFormat:@"%@",date];
            } else {
                cell.datePlace.text= [NSString stringWithFormat:@"%@, %@",date,place];
            }
        } else {
            cell.datePlace.text= [NSString stringWithFormat:@"%@",date];
        }

但问题仍然存在。

3 个答案:

答案 0 :(得分:28)

我猜你的源数据来自JSON或类似的东西(正在解析数据并且缺少的数据被设置为NSNull)。这是您需要处理的NSNull,目前不是。

基本上:

if (place == nil || [place isEqual:[NSNull null]]) {
    // handle the place not being available 
} else {
    // handle the place being available
}

答案 1 :(得分:3)

使用

if (! [place isKindOfClass:[NSNull class]) {
  ...
}

而不是

if (place) {
   ...
}

注意:NSNull对象不是nil,因此if (place)将为真。

答案 2 :(得分:2)

使用[NSNull null]:

if ([place isKindOfClass:[NSNull class]])
{
    // What happen if place is null

}