Objective c 将NSNumber与0进行比较是否不起作用?
我的应用程序中有一个JSON解析器,我将该值加载到detailDataSourceDict变量中。当我尝试获取数组的valueForKey并尝试将其与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) {
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) {