2012-08-01 13 views
31

recibido datos de JSON, que es el siguiente aspecto:¿Cómo probar el valor NSCFBoolean?

{ 
    myself = 1; 
    "id" = 123; 
} 

y lo puse en un NSDictionary * messageDic, también define un valor * isMyself para recibir el valor de mí mismo

Boolean isMyself = [messageDic objectForKey:@"myself"]; 

pero No funciona.

Así que imprimir el tipo de fecha,

const char* className = class_getName([[messageDic objectForKey:@"myself"] class]); 
NSLog(@"yourObject is a: %s", className); 
NSLog(@"Size of BOOL %d", sizeof(isMyself)); 
NSLog(@"Size of BOOL %@", [messageDic objectForKey:@"myself"]); 

los resultados son los siguientes:

2012-08-01 17:41:48.886 yourObject is a: __NSCFBoolean 
2012-08-01 17:41:48.887 Size of BOOL 1 
2012-08-01 17:41:48.887 Size of BOOL 0 

y la sección de abajo si tampoco funciona.

if ([messageDic objectForKey:@"myself"] == 0) 

me trataron

NSCFBoolean *isMyself = [messageDic objectForKey:@"myself"]; 

llegué forma de error anterior.

mi pregunta es ¿qué debo hacer para probar el valor de [messageDic objectForKey:@"myself"]? y ¿cuál es el __NSCFBoolean?

Gracias!

Respuesta

59

el resultado que consiguió con [messageDic objectForKey: @ "yo"], que es un NSNumber, a continuación, necesitas convertir el resultado a Bool. Intente a continuación:

if ([[messageDic objectForKey:@"myself"]boolValue] == NO) 
+1

Sus idiomas de mezcla - boolValue es SÍ o NO, por lo que el código anterior debería ser '... == NO) –

+1

Como dijo @DavidH, es peligroso usar "== NO" en un BOOL – onevcat

30

__NSCFBoolean es una clase privada que se utiliza en NSNumber class cluster. Para extraer valor apropiado de ella es necesario utilizar métodos de la clase NSNumber, -boolValue en su caso:

BOOL isMyself = [[messageDic objectForKey:@"myself"] boolValue]; 
+0

Cambie ese boolvalue a boolValue would a? No tengo permitido hacer ediciones de carbonilla individuales. – Rydell

Cuestiones relacionadas