12

我正在使用返回JSON的 Web 服务。我得到的值之一是"< null >".

当我运行以下代码时,如果不应该执行 if 语句,它仍然会被执行。

有什么理由吗?

NSDictionary *location = [dictionary valueForKey:@"geoLocation"];       //get the product name
NSString *latitude = [location valueForKey:@"latitude"];
NSLog(@"%@", latitude);

NSString *longitude = [location valueForKey:@"longitude"];

if (![latitude isEqual: @"<null>"] && ![longitude isEqual: @"<null>"]) {
    NSLog(@"%d", i);
    CLLocationCoordinate2D coordinate;
    coordinate.longitude = [latitude doubleValue];
    coordinate.longitude = [longitude doubleValue];
    [self buildMarketsList:coordinate title:title subtitle:nil]; //build the browse list product
}
4

4 回答 4

31

我正在使用返回 JSON 的 Web 服务。我得到的值之一是“< null >”

啊哈。两种可能:

一、JSON不包含经纬度信息。在这种情况下,它们的键不存在于您要返回的字典中,因此您实际上正在获取一个nil(或NULL)指针。当消息nil返回零时,两个条件都会触发(由于应用了否定)。试试这个:

if (latitude != nil && longitude != nil)

并且永远不要依赖对象的描述。

二、可能 JSON 包含null值,并且您使用的 JSON 解析器null变成[NSNull null],然后您尝试将字符串与该NSNull. 在这种情况下,试试这个:

if (![latitude isEqual:[NSNull null]] && ![longitude isEqual:[NSNull null]])
于 2013-04-20T05:50:09.330 回答
2

我有同样的问题,但解决如下,用下面的替换你的,

if (![latitude isKindOfClass:[NSNull class]] && ![longitude isKindOfClass:[NSNull class]])
于 2013-04-20T05:53:53.900 回答
0

通常,如果您在 JSON 响应中得到 null,则需要检查NSNull.

在您的情况下,您应该执行以下操作:

if ( [location valueForKey:@"longitude"] == [NSNull null]) {
     // is null object
} 
于 2013-04-20T05:52:33.817 回答
0
if ([latitude isEqual:[NSNull null]])
{
 //do something
 latitude = @"";
}
else
{
 //do something else
 latitude = json value
}

这就是我要做的。这是因为即使返回 null,我也需要存储该值。

于 2013-04-20T06:10:02.467 回答