Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将NSNumber与0进行比较是否不起作用?_Objective C_Json_Nsnumber - Fatal编程技术网

Objective c 将NSNumber与0进行比较是否不起作用?

Objective c 将NSNumber与0进行比较是否不起作用?,objective-c,json,nsnumber,Objective C,Json,Nsnumber,我的应用程序中有一个JSON解析器,我将该值加载到detailDataSourceDict变量中。当我尝试获取数组的valueForKey并尝试将其与0进行比较时,它永远不会起作用 这是我的密码: if (indexPath.row == 1) { NSNumber *rating = [detailDataSourceDict valueForKey:@"rating"]; NSLog(@"Rating: %@",rating); if (rating == 0) {

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


有什么建议吗?谢谢。

评级
是指向NSNumber对象的指针,如果与
==0
比较,则仅比较指针

如果要将该值与0进行比较,则必须使用try获得实际值


NSNumber*评级
是一个对象<代码>0是一种基本类型。 基本类型可以与
=
进行比较。物体不能;需要对它们进行比较,以确定它们是否相等

因此,请将其替换为:

rating == 0
与:

@0
作为

或者:

rating.integerValue == 0

甚至编译错误代码的原因是
0
等于
0x0
,而
0x0
又等于
nil
(某种程度上,忽略了细节)。 因此,您当前的代码相当于:

rating == nil

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

[NSNumber intValue];
请参阅“访问数值”@:


要将其从以下位置更改:

if (rating == 0) {


谢谢你的快速回复。。。当堆栈溢出允许我时,我将接受最适合我的答案…感谢您的快速回复。。。当堆栈溢出允许我使用时,我会接受最适合我的答案…这是正确的,有趣的是Xcode在这种情况下可能会发出警告。如果您将对象与整数进行比较,为什么Xcode不抛出错误?因为ObjC(以及ObjC基于的C)在这里隐式地将指针转换为整数。像这样的bug是Swift没有隐式强制转换的众多原因之一。尽管有时可能会很烦人(CGFloat,有人吗?),但总体而言,选择是正确的在担心
integerValue
的行为超出范围后,我来到这里是想寻找一种方法来检查
NSNumber
是否为
0
。我想您可能需要
[评级相等:@0]
选项。谢谢您的快速回复。。。当堆栈溢出允许我…NSNUmber=object,而不是int时,我将接受最适合我的答案!额定值
[NSNumber intValue];
if (rating == 0) {
if ([rating intValue] == 0) {