ios:比较NSString与“<null>”无法正常工作</null>

时间:2013-04-20 05:44:04

标签: ios json null nsstring

我正在使用返回 JSON 的网络服务。我得到的一个值是"< 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 个答案:

答案 0 :(得分:31)

  

我正在使用返回JSON的Web服务。我得到的一个值是“&lt; null&gt;”

啊哈。两种可能性:

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

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

从不依赖于对象的描述。

II。可能JSON包含null个值,而您正在使用的JSON解析器将null转换为[NSNull null],反过来您尝试将字符串与NSNull进行比较。在这种情况下,试试这个:

if (![latitude isEqual:[NSNull null]] && ![longitude isEqual:[NSNull null]])

答案 1 :(得分:2)

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

if (![latitude isKindOfClass:[NSNull class]] && ![longitude isKindOfClass:[NSNull class]])

答案 2 :(得分:0)

通常,如果您在JSON响应中获取null,则需要检查NSNull

在你的情况下,你应该这样做:

if ( [location valueForKey:@"longitude"] == [NSNull null]) {
     // is null object
} 

答案 3 :(得分:0)

if ([latitude isEqual:[NSNull null]])
{
 //do something
 latitude = @"";
}
else
{
 //do something else
 latitude = json value
}

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