【问题标题】:Why does this null check fail?为什么这个空检查失败?
【发布时间】:2017-10-23 03:54:51
【问题描述】:

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

这是我的简单检查

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 检查不起作用?

【问题讨论】:

标签: objective-c nsnull


【解决方案1】:

(null)代表nil,不是[NSNull null],所以检查imageUrl != NSNull成功。

你必须写

if (imageUrl) {

相同
if (imageUrl != nil) {

【讨论】:

  • 是否有关于不同类型 null nil 等的文档?我用谷歌搜索,但找不到一个好的
  • NSNull 仅在少数情况下使用。马特汤普森写了一个article about nil / Nil / NULL / NSNull
【解决方案2】:

nil 代表什么,或者在技术术语中,我们可以说'\0'(根据 C 概念)。当我们创建任何类的实例时,默认情况下,Objective C 将其设为 nil。

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

当您使用 NSDictionary 时,您可以按如下方式检查它。

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

【讨论】:

    【解决方案3】:

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

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

    或者

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      相关资源
      最近更新 更多