我的应用程序中有一个JSON解析器,我将值加载到detailDataSourceDict变量中。当我尝试获取数组的valueForKey并尝试将其与0进行比较时,它永远不会起作用......
这是我的代码:
if (indexPath.row == 1) {
NSNumber *rating = [detailDataSourceDict valueForKey:@"rating"];
NSLog(@"Rating: %@",rating);
if (rating == 0) {
cell.detailTextLabel.text = @"This sheet has not yet been rated.";
}
else {
cell.detailTextLabel.text = [NSString stringWithFormat:@"This sheet has a %@ star rating.",rating];
}
cell.textLabel.text = @"Rating";
}
我在我的JSON Feed中看到“评级”:“0”,但是当评级为0时,它显示“此表格有0星评级。”,而不是“此表尚未评级”。
有什么建议吗?感谢。
答案 0 :(得分:52)
NSNumber *rating
是一个对象。 0
是原始类型。
可以将原始类型与==
进行比较。物体不能;需要使用isEqual:
来比较它们。
因此取而代之:
rating == 0
使用:
[rating isEqual:@0]
(@0
是NSNumber literal)
或者:
rating.integerValue == 0
你的错误代码甚至编译的原因是0
等于0x0
,而nil
又等于rating == nil
(有点像,节省了细节)。
所以,你当前的代码将等同于:
{{1}}
答案 1 :(得分:4)
rating
是指向NSNumber对象的指针,如果与== 0
进行比较,则只会比较指针。
如果您想将值与0进行比较,则必须使用intValue
获取实际值,尝试;
if ([rating intValue] == 0) {
答案 2 :(得分:3)
NSNumber是一个对象,您必须使用值访问器访问它的值。
[NSNumber intValue];
请参阅“访问数字值”@:
答案 3 :(得分:3)
您想要改变它:
if (rating == 0) {
要
if ([rating intValue] == 0) {