关于 ios:识别objective C 中的 NULL 值

Identify NULL values in objective C

本问题已经有最佳答案,请猛点这里访问。

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

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

1
2
3
4
5
6
7
8
9
10
11
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

我第一次尝试这个并崩溃了

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

然后这也崩溃了。

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

这是来自错误日志

1
2
-[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'

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


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

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


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

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

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

就足够了。


1
2
3
4
   if ([[result[i] objectForKey:@"ordertotalprice"] isKindOfClass:[NSNull class]])
   {
      orderHead.price = 0;
   }


1
2
3
4
5
if(![result[i] objectForKey:@"ordertotalprice"]){
    orderHead.price = 0;
}else{
    orderHead.price = [[result[i] objectForKey:@"ordertotalprice"] doubleValue];
}