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
}

Это то, что я буду делать. Это связано с тем, что мне нужно сохранить значение, даже если возвращает нуль.