2013-09-04 19 views
18

Sto riscontrando questo strano problema. NSDictionary non restituisce il valore intero corretto.Come ottenere un valore intero da NSDictionary?

Codice di risposta JSON dal server.

{ 
"status":"ok", 
"error_code":0, 
"data" : [], 
"msg":"everything is working!" 
} 

Il JSON viene convertito in un NSDictionary.

NSError *error = nil; 
NSDictionary *jsonDict = [NSJSONSerialization 
          JSONObjectWithData:data 
          options:NSJSONReadingMutableContainers 
          error: &error]; 

Accedo al valore NSDictionary utilizzando il seguente codice.

int error_code = (int)[jsonDict valueForKey:@"error_code"] 
NSLog(@"%i", error_code); 
The log outputs the following: 143005344 

Ho anche provato objectForKey e ottengo la stessa risposta.

Grazie, in anticipo.

risposta

46

Sì, emette il puntatore del valore ed è per questo che viene visualizzato questo output di registro.

Non è possibile eseguire il cast del puntatore su un numero intero e prevedere il valore.

int error_code = [[jsonDict valueForKey:@"error_code"] integerValue]; 

o se si desidera utilizzare il moderno Objective-C

int error_code = [jsonDict[@"error_code"] integerValue]; 
+5

Si dovrebbe usare 'int' e' intValue', oppure 'NSInteger' e' integerValue', ma non si devono mescolarli senza un cast esplicito. – bdesham

+0

Grazie, ha funzionato. – James

+0

Ebbene sì, il puntatore dell'oggetto, che è NSnumber – Lefteris

8

I numeri vengono memorizzati come NSNumber casi nei dizionari plist/JSON. Prova a chiamare uno dei getter s' NSNumber come intValue:

int error_code = [jsonDict[@"error_code"] intValue]; 

Nota anche la nuova sintassi subscripting per i dizionari.

Problemi correlati