Ios: Сравнить NSString с "<null>" не работает
Я использую веб-службу, которая возвращает JSON. Одно из значений, которое я получаю, это "< null >"
.
Когда я запускаю следующий код, если statment все равно выполняется, когда он не соответствует.
По какой причине?
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
}
Ответы
Ответ 1
Я использую веб-сервис, который возвращает JSON. Одно из значений, которое я получаю, это "<null> "
Ага. Две возможности:
я. 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]])
Ответ 2
У меня была та же проблема, но решена, как показано ниже,
Замените if, если:
if (![latitude isKindOfClass:[NSNull class]] && ![longitude isKindOfClass:[NSNull class]])
Ответ 3
Обычно, если вы получаете null в ответе JSON, вам нужно проверить его на NSNull
.
В вашем случае вы должны сделать что-то вроде этого:
if ( [location valueForKey:@"longitude"] == [NSNull null]) {
// is null object
}
Ответ 4
if ([latitude isEqual:[NSNull null]])
{
//do something
latitude = @"";
}
else
{
//do something else
latitude = json value
}
Это то, что я буду делать. Это связано с тем, что мне нужно сохранить значение, даже если возвращает нуль.