2012-08-01 6 views
31

ricevuti i dati da JSON, che è simile a:Come testare il valore NSCFBoolean?

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

e l'ho messo in un NSDictionary * messageDic, ho anche definito un valore * isMyself a ricevere il valore di me stesso

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

ma non funziona.

Così ho stampare il tipo di data,

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"]); 

i risultati sono:

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 

e se la sezione di seguito anche non funziona.

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

ho cercato

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

ho ottenuto modulo di errore di cui sopra.

la mia domanda è cosa devo fare per testare il valore di [messageDic objectForKey:@"myself"]? e qual è il __NSCFBoolean?

Grazie!

risposta

59

il risultato che hai da [messageDic objectForKey: @ "me stesso"], che è un NSNumber, poi è necessario convertire il risultato in Bool. Quindi prova qui sotto:

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

I tuoi linguaggi di miscelazione - boolValue è SÌ o NO, quindi il codice sopra dovrebbe essere '... == NO) –

+1

Come ha detto @DavidH, è pericoloso usare "== NO" su un BOOL – onevcat

30

__NSCFBoolean è una classe privata utilizzata in NSNumber class cluster. Per estrarre valore appropriato da esso è necessario utilizzare i metodi della classe NSNumber, -boolValue nel tuo caso:

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

Modificare boolvalue in boolValue vero? Non mi è permesso fare singole modifiche al char. – Rydell