【问题标题】:[NSNull length]: unrecognized selector sent to instance in objective-c [duplicate][NSNull length]: unrecognized selector sent to instance in objective-c [duplicate]
【发布时间】:2016-02-25 13:33:57
【问题描述】:

我从服务中获取一些 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 长度]:无法识别的选择器已发送到实例。

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

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    nil 如果没有找到具有该键的对象,则由字典返回。

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

    你需要检查你得到的对象是否真的是一个字符串。您未能捕捉到存在对象但不是字符串的情况。

    例如

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

    【讨论】:

    • 对我来说似乎很清楚提问者已经大致了解了这么多。至于最后一段,问题是重复的,应该这样标记而不是回答。
    • 我似乎不太清楚。他似乎表示他希望 JSON null 变成 nil。
    • 花了我一整天的时间才注意到其中的不同。一些 NSFileManager 提供了两个签名。采用 URL 和路径的那个。我的错误是将 NSURL 插入它要求路径的位置。
    【解决方案2】:

    我尝试了其他问题,该问题与您在此处提出的问题相同。但是您需要像 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:-)

    【讨论】:

    • 它工作正常。我检查了它。
    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多