2012-08-01 8 views
31

empfangenen Daten von JSON, das sieht aus wie ist:Wie NSCFBoolean Wert zu testen?

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

und ich es in ein NSDictionary * messageDic setzen, ich definiert auch einen Wert * isMyself den Wert von mir

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

zu empfangen, aber es funktioniert nicht.

So drucke ich das Datum Typ,

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

die Ergebnisse sind:

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 

und die, wenn unten im Abschnitt auch nicht funktioniert.

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

Ich versuchte

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

Ich habe oben Fehler Form.

meine Frage ist, was soll ich tun, um den Wert von [messageDic objectForKey:@"myself"] zu testen? und was ist die __NSCFBoolean?

Danke!

Antwort

59

das Ergebnis Sie haben [messageDic objectForKey: @ „myself“], die ein NSNumber ist, dann Sie müssen das Ergebnis in Bool konvertieren. So versuchen Sie unten:

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

Ihre Mischsprachen - boolValue ist entweder YES oder NO, daher sollte der obige Code '... == NO] sein. –

+1

Wie @DavidH sagte, ist es gefährlich, "== NO" auf einem BOOL zu verwenden – onevcat

30

__NSCFBoolean ist eine private Klasse, die in NSNummer class cluster verwendet wird. So extrahieren entsprechenden Wert aus es müssen Sie verwenden Methoden aus NSNumber Klasse, -boolValue in Ihrem Fall:

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

Ändern Sie diesen boolvalue zu boolValue würden Sie? Ich bin nicht berechtigt, einzelne Char-Edits zu machen. – Rydell