比较NSNumber到0不工作?

时间:2012-11-17 15:38:02

标签: objective-c json nsnumber

我的应用程序中有一个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星评级。”,而不是“此表尚未评级”。

有什么建议吗?感谢。

4 个答案:

答案 0 :(得分:52)

NSNumber *rating是一个对象。 0是原始类型。 可以将原始类型与==进行比较。物体不能;需要使用isEqual:来比较它们。

因此取而代之:

rating == 0

使用:

[rating isEqual:@0]

@0NSNumber 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];

请参阅“访问数字值”@:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html

答案 3 :(得分:3)

您想要改变它:

if (rating == 0) {

if ([rating intValue] == 0) {