识别目标C中的NULL值

时间:2013-12-16 07:16:11

标签: ios objective-c

我知道我们可以使用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'

我不确定我在这里做错了什么。一些帮助apreciated。

4 个答案:

答案 0 :(得分:3)

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

编辑:但是,只是比较值

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

就足够了。

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)


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