Подтвердить что ты не робот

Значение iOS NSDictionary определяет, если логическое значение из JSON boolean

У меня есть ответ 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

Как я могу обойти это? Typecasting in boolean также дает предупреждение.

4b9b3361

Ответ 1

так как [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.

Ответ 2

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

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