2014-04-06 217 views
1

我正在發出JSON請求並希望從其中一個字段獲取int值。從JSON響應中獲取值對象

{ 
"currentPage": 1, 
"numberOfPages": 5, 
"totalResults": 234, 
"data": [], 
"status": "success" 
} 

我想獲取numberOfPages的值。我的代碼如下

_pages = [responseObject objectForKey:@"numberOfPages"]; 
_numberOfPages = (int)_pages; 
NSLog(@"%d", _numberOfPages); 

而不是爲numberOfPages值時,是的NSLog可以150198512.有人請解釋一下爲什麼?在索引0處嘗試對象會導致其崩潰。

回答

2

_pages應該是您的定義中的NSNumber。您不能將其轉換爲原始類型,您必須請求原始類型。 _numberOfPages應該是一個NSInteger(或者也許NSUInteger),你應該得到與價值:

_numberOfPages = [_pages integerValue]; 

旁白:考慮使用self.pagesself.numberOfPages,而不是直接訪問實例變量(它可以幫助你在未來的維護) 。

使用self.pages導致(在呼叫或self.pages = xxxsetPages:xxx)到pages一個呼叫的方法來獲得(或設置)該實例變量(_pages)的含量。因此,如果您有該方法的自定義實現,它將被調用並且您的自定義邏輯將運行。如果您只是使用_pages,那麼它將不會被調用,並且如果您需要進行更改,則需要稍後進行大量編輯。

你最好的選擇是當你想要更新一個屬性時使用self.XXX = xxx,當你想要使用它時使用XXX xxx = self.xxx

這不是一條硬性規定。 Interesting discussion here

+0

謝謝! 你能解釋一下_varlable和self.variable之間的區別是什麼?對不起,我是Obj-C的新手... – user3501590