Problema de la instrucción IF en IOS utilizando NSString

Mi statement if no funcionará. devuelve active 1 pero no funciona en la IF statement

 JSONDecoder *jsonKitDecoder = [JSONDecoder decoder]; NSDictionary *dict = [jsonKitDecoder objectWithData:jsonData]; NSString *userid = [dict valueForKeyPath:@"users.user_id"]; NSString *active = [dict valueForKeyPath:@"users.active"]; NSLog(@"%@",userid); // 2013-06-20 03:03:21.864 test[81783:c07] (74) NSLog(@"%@",active); // 2013-06-20 03:03:21.864 test[81783:c07] (1) if ([active isEqualToString:@"1"]){ // Do something } 

Parece que no consigo que este IF funcione. ¿Necesito cambiar el NSString a un int ?

Para empezar, use un estilo moderno para recuperar valores de dictionarys, en lugar de valueForKeyPath:

 NSDictionary* users = dict[@"users"]; id active = users[@"active"]; 

Una vez que usa un estilo moderno, creo que el valor activo es en realidad un número NSN que representa un valor boolean. De modo que su bloque si se lee:

 if([active isKindOfClass:NSNumber] && [active boolValue]) { //active is an NSNumber, and the user is active } 

La syntax de su instrucción if está bien. Intentaría el método alternativo para recuperar valores de un dictionary como se mencionó anteriormente.

NSString *active = @"1";

 if ([active isEqualToString:@"1"]) { // Do something NSLog(@"It works!"); } 

Es más que probable que el object " users.active " que se devuelve desde ese stream JSON de NSDictionary sea un " BOOL " o un " NSInteger " como la carga útil de un object NSNumber y no es un object NSString.

Intente usar:

 NSNumber * activeNumber = [dict valueForKeyPath: @"users.active"]; 

y vea si " if ([activeNumber boolValue] == YES) " funciona mejor para usted.