我正在使用返回 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
}
答案 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,我也需要存储该值。