2013-09-04 24 views
18

Mam ten dziwny problem. NSDictionary nie zwraca poprawnej wartości całkowitej.Jak uzyskać wartość całkowitą z NSDictionary?

Kod odpowiedzi JSON z serwera.

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

JSON jest konwertowany na NSDictionary.

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

Uzyskuję dostęp do wartości NSDictionary za pomocą następującego kodu.

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

Próbowałem nawet objectForKey i otrzymałem tę samą odpowiedź.

Dzięki, z góry.

Odpowiedz

46

Tak, wyprowadza wskaźnik wartości i dlatego widzisz dane wyjściowe dziennika.

Nie można rzucić wskaźnika na liczbę całkowitą i oczekiwać wartości.

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

lub jeśli chcesz korzystać z nowoczesnej objective-c

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

Powinieneś użyć 'int' i' intValue', lub 'NSInteger' oraz' integerValue' - ale nie powinieneś mieszać ich bez wyraźnego rzutowania. – bdesham

+0

Dzięki, zadziałało. – James

+0

No tak, wskaźnik obiektu, który jest NSNumber – Lefteris

8

Liczby są przechowywane jako NSNumber przypadkach w słownikach plist/JSON. Spróbuj zadzwonić jedną z pobierające NSNumber Like intValue:

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

Uwaga również nowa składnia indeksowanie słowników.

Powiązane problemy