23

我的应用程序中有一个 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 提要中看到“评级”:“0”,但当评级为 0 时,它显示“此工作表的星级为 0。”,而不是“此工作表尚未评级”。

有什么建议么?谢谢。

4

4 回答 4

60

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

因此替换这个:

rating == 0

和:

[rating isEqual:@0]

@0作为NSNumber 文字

或者:

rating.integerValue == 0

你的错误代码甚至编译的原因0是等于0x0which 又等于nil(有点,保留细节)。因此,您当前的代码将等同于:

rating == nil
于 2012-11-17T15:41:38.997 回答
4

rating是一个指向 NSNumber 对象的指针,如果与 比较== 0,您将只比较指针。

如果要将与 0 进行比较,则必须使用 获取实际值intValue,尝试;

if ([rating intValue] == 0) {
于 2012-11-17T15:41:37.983 回答
4

NSNumber 是一个对象,您必须使用值访问器访问它的值。

[NSNumber intValue];

请参阅“访问数值”@:

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

于 2012-11-17T15:41:45.540 回答
3

你想改变它:

if (rating == 0) {

if ([rating intValue] == 0) {
于 2012-11-17T15:44:31.673 回答