Значение iOS NSDictionary определяет, является ли логическое значение из JSON логическим - PullRequest
27 голосов
/ 25 ноября 2011

У меня есть ответ JSON от веб-сервера, который выглядит следующим образом:

{"success":true, "token":"123456"}

и я хочу использовать это в операторе if и сравнить его с "YES".

Однако, это не работает:

NSDictionary *response = [response JSONValue]; // the JSON value from webservice response, converted to NSDictionary

if ([response objectForKey:@"success"]){} // does not work
if ([response objectForKey:@"success"] == YES){} // does not work
if ([[response objectForKey:@"success"] integerValue] == YES) {} // does not work...erroneous probably

Как я могу обойти это? Типирование в Boolean также выдает предупреждение

Ответы [ 2 ]

61 голосов
/ 25 ноября 2011

, поскольку [response objectForKey:@"success"] не работает, что происходит при попытке [response valueForKey: @"success"]?

Я подозреваю, что он возвращает NSNumber, и тогда вы можете сделать что-то вроде:

NSNumber * isSuccessNumber = (NSNumber *)[response objectForKey: @"success"];
if([isSuccessNumber boolValue] == YES)
{
    // this is the YES case
} else {
    // we end up here in the NO case **OR** if isSuccessNumber is nil
}

Кроме того, как выглядит NSLog( @"response dictionary is %@", response ); в вашей консоли? Я вижу, что библиотека JSON, которую вы используете , возвращает типы NSNumber для objectForKey, поэтому я подозреваю, что у вас может не быть действительного NSDictionary.

11 голосов
/ 07 мая 2013

Альтернативный подход к этому, который не требует преобразования в NSNumber, выглядит примерно так:

if ([response objectForKey:@"success"])
{
    if ([[response objectForKey:@"success"] boolValue])
        NSLog(@"value is true");
}
...