2011-11-25 15 views
26

tengo una respuesta JSON desde un servidor web que tiene este aspecto:valor iOS NSDictionary determinar si booleana de JSON booleano

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

y quiero usar que, en una sentencia if, y compararlo con el "SI ".

Sin embargo, hacer esto no funciona:

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 

¿Cómo puedo solucionar esto? Typecasting en Boolean produce una advertencia también

+0

¿Cómo estás analizar la respuesta JSON? – tarmes

+0

la pregunta fue etiquetada sbjson. Estoy usando la biblioteca ios SBJSON http://stig.github.com/json-framework/ – yretuta

+0

Olvidé resaltar el código que hace el análisis sintáctico, lo siento – yretuta

Respuesta

60

desde [response objectForKey:@"success"] no funciona, ¿qué ocurre cuando intenta [response valueForKey: @"success"]?

sospecho que devuelve un NSNumber y entonces usted puede hacer algo como:

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 
} 

Además, lo que hace NSLog(@"response dictionary is %@", response); aspecto como en su consola? Veo la biblioteca JSON que está usando does return NSNumber types for objectForKey, por lo que sospecho que es posible que no tenga un NSDictionary válido.

+0

esto funciona. gracias :) – yretuta

+0

funcionó para mí también! –

+0

Falta el símbolo '@' antes del primer argumento de 'NSLog' –

11

Un enfoque alternativo a esto, que no requiere conversión a NSNumber es algo parecido a continuación:

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