为什么这个空检查失败了?

Why does this null check fail?

我正在使用这个简单的代码来检查 NSString 对象是否为 null,但由于某种原因它失败了

这是我的简单检查

NSString *imageUrl = [dict objectForKey:@"imageUrl"];

    NSLog(@"Jonge: %@", imageUrl);

    if(![imageUrl isEqual:[NSNull null]]) {
        NSLog(@"In the loop");
        NSURL *url = [[NSURL alloc]initWithString:imageUrl];
        NSData *data =[NSData dataWithContentsOfURL:url];
        cell.imageView.image = [UIImage imageWithData:data];
    }

调试清楚地显示对象为空,如下所示

2017-10-23 11:48:22.711228+0800 NWMobileTill[46614:7498779] Jonge: (null)

但我仍然陷入如下循环

2017-10-23 11:48:22.711367+0800 NWMobileTill[46614:7498779] In the loop

为什么我的空检查不起作用?

(null) 表示 nil,而不是 [NSNull null],因此检查 imageUrl != NSNull 成功。

你必须写

if (imageUrl) {

相同
if (imageUrl != nil) {

您还可以检查字符串是否为空。

if(![imageUrl isEqualToString:@""])

或者

if(![imageUrl isKindOfClass:[NSNull class]])

nil 不代表任何东西,或者在技术术语中,我们可以说 '[=12=]'(根据 C 概念)。当我们创建任何 Class 的实例时,默认情况下 Objective C 将其设为 nil。

[NSNull null] 将给出一个对象。在 Objective C 中,NSNull 的使用受到限制。它用于集合(如 NSArrayNSDictionary

由于您使用的是NSDictionary,您可以如下查看。

if ([dict objectForKey:@"imageUrl"] != [NSNull null]) {
    //your code...
}