【问题标题】:Identify NULL values in objective C [duplicate]识别目标 C 中的 NULL 值
【发布时间】:2013-12-16 07:16:10
【问题描述】:

我知道我们可以使用 nil 来验证目标 c 中的空值。我一直在尝试使用它,但程序每次都会崩溃。

这就是我在服务中得到的响应

2013-12-16 12:45:32.867 Pizza to Go[1857:a0b] 0
2013-12-16 12:45:32.868 Pizza to Go[1857:a0b] <null>
2013-12-16 12:45:32.868 Pizza to Go[1857:a0b] <null>
2013-12-16 12:45:32.868 Pizza to Go[1857:a0b] <null>
2013-12-16 12:45:32.868 Pizza to Go[1857:a0b] <null>
2013-12-16 12:45:32.869 Pizza to Go[1857:a0b] 70
2013-12-16 12:45:32.869 Pizza to Go[1857:a0b] 130
2013-12-16 12:45:32.869 Pizza to Go[1857:a0b] 0
2013-12-16 12:45:32.869 Pizza to Go[1857:a0b] 80
2013-12-16 12:45:32.869 Pizza to Go[1857:a0b] 50.5
2013-12-16 12:45:32.869 Pizza to Go[1857:a0b] 10

我先试了一下,结果崩溃了

if([[result[i] objectForKey:@"ordertotalprice"] isEqualToString:@"<null>"]){
    orderHead.price = 0;
}else{
    orderHead.price = [[result[i] objectForKey:@"ordertotalprice"] doubleValue];
}

然后这也崩溃了。

if([result[i] objectForKey:@"ordertotalprice"] == nil){
    orderHead.price = 0;
}else{
    orderHead.price = [[result[i] objectForKey:@"ordertotalprice"] doubleValue];
}

这是来自错误日志

-[NSNull doubleValue]: unrecognized selector sent to instance 0x20af068
2013-12-16 12:55:19.017 Pizza to Go[2083:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull doubleValue]: unrecognized selector sent to instance 0x20af068'

我不确定我在这里做错了什么。一些帮助表示赞赏。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    Foundation 集合只能包含对象类型(NSObject 子类)。因此,为了表示 nil,我们使用+[NSNull null]。碰巧NSNull-description 实现返回&lt;null&gt;,这就是您在控制台中看到的。

    尝试将-objectForKey 的结果与[NSNull null] 进行比较。

    【讨论】:

      【解决方案2】:

      NSDictionary/NSMutableDictionary 接受[NSNull null] 以指示空条目。

      编辑:但是是的,当只是比较值时

      if([result[i] objectForKey:@"ordertotalprice"]){
          orderHead.price = 0;
      }else{
          orderHead.price = [[result[i] objectForKey:@"ordertotalprice"] doubleValue];
      }
      

      足够了。

      【讨论】:

        【解决方案3】:
           if ([[result[i] objectForKey:@"ordertotalprice"] isKindOfClass:[NSNull class]])
           {
              orderHead.price = 0;
           }
        

        【讨论】:

        • 这里的类比较是多余的。 +null 被实现为单例,它总是满足简单的指针比较。
        【解决方案4】:
        
        if(![result[i] objectForKey:@"ordertotalprice"]){
            orderHead.price = 0;
        }else{
            orderHead.price = [[result[i] objectForKey:@"ordertotalprice"] doubleValue];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-06
          • 1970-01-01
          • 2016-07-02
          • 1970-01-01
          相关资源
          最近更新 更多