2014-04-06 59 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