[NSNull length]:无法识别的选择器发送到objective-c中的实例

时间:2016-02-25 13:33:58

标签: ios objective-c

我从服务获取一些JSON数据,一个属性是表示图像url的字符串,似乎返回的是NULL,我做检查但是XCode在我的if语句之前中断并生成异常。这是我的代码:

- (void)configureCellForAlbum:(Album *)album {

    self.albumTitle.text = album.albumTitle;
    self.artisteName.text = album.artisteName;
    NSURL *imageUrl = [NSURL URLWithString:album.thumbnail];
    if (imageUrl == nil) {
        self.albumThumbnail.image = [UIImage imageNamed:@"music_record"];
    }
    else {
        self.albumThumbnail.imageURL = imageUrl;
    }
}

例外是

  

由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [NSNull length]:无法识别的选择器发送到实例。

如何进行检查,以便如果值为null,则使用本地图像但如果不为null则使用返回的图像字符串url?

2 个答案:

答案 0 :(得分:6)

如果没有找到具有该密钥的对象,则字典返回

nil

JSON解析器插入NSNull的实例,以指示存在空值键。

你需要检查你得到的对象是否真的是一个字符串。你没有抓住有对象的情况,但它不是一个字符串。

E.g。

if ([albm.thumbnail isKindOfClass:[NSString class]])
    ... a string-form URL is present ...
else
    .... something else, or nothing, was found; use a fallback ...

答案 1 :(得分:0)

我尝试过其他问题,问你在这里问的问题。但是你需要像上面的Tommy代码那样自定义代码。

NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"iOS",@"language",nil];
id Value = [dict objectForKey:@"language"];
NSString *strLanguage = @"";
if (Value != [NSNull null]) {
  strLanguage = (NSString *)Value;
  NSLog(@"The strLanguage is - %@", strLanguage);
}

输出

The strLanguage is - iOS

谢谢你nhgrif: - )