2013-09-04 21 views
18

Bu tuhaf sorunu yaşıyorum. NSDictionary doğru tamsayı değerini döndürmüyor.NSDictionary'dan tamsayı değeri nasıl alınır?

Sunucudan JSON yanıt kodu.

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

JSON bir NSDictionary öğesine dönüştürülüyor.

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

Aşağıdaki kodu kullanarak NSDictionary değerine erişiyorum.

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

objectForKey'yi bile denedim ve aynı yanıtı alıyorum.

Önceden teşekkürler.

cevap

46

Evet, değerin işaretçisini çıkarır ve bu nedenle bu günlük çıktısını görürsünüz.

İşaretçiyi bir tamsayıya çeviremez ve değeri beklemezsiniz.

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

veya

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

"int" ve "intValue" veya "NSInteger" ve "integerValue" kullanmalısınız, ancak bunları açık bir alıntı olmadan karıştırmamalısınız. – bdesham

+0

Teşekkürler, işe yaradı. – James

+0

Evet, bir NSNumber – Lefteris

8

Numaraları Plist/json sözlüklerde NSNumber örnekleri olarak depolanır Modern amaç-c kullanmak istiyorsanız. intValue gibi NSNumber 'ın getters birini aramayı deneyin:

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

Not sözlükleri için yeni Altsimgeleme sözdizimi.

İlgili konular