Iphone 尽管在iOS中比较值似乎正确,但条件始终失败

Iphone 尽管在iOS中比较值似乎正确,但条件始终失败,iphone,ios,xcode,Iphone,Ios,Xcode,当我在nslog中检查number的值时,它显示“0” NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; NSNumber *number=[data objectForKey:@"serial"]; NSLog(@"%@",number); if(number ==0 ) { imgButton.hidden=Y

当我在nslog中检查number的值时,它显示“0”

    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
    NSNumber *number=[data objectForKey:@"serial"];
    NSLog(@"%@",number);
    if(number ==0 )
    {
         imgButton.hidden=YES;
    }
但条件总是失败,我也像这样修改了代码

     NSString *number=[data objectForKey:@"serial"]
     NSLog(@"%@",number);
     if(number == @"0" )
     {
           imgButton.hidden=YES;
     }

但是这里的条件也失败了,这有什么问题吗?

NSNumber是一个对象,0是一个整数(一种基本类型)。他们永远不会平等。但是您可以像这样更改比较
[number intValue]==0
,当您的NSNumber的值为
0

时,这将起作用。在字符串比较中,您应该使用该方法

isEqualToString:NSString *)string
作为比较

对于NSITS数字

isEqualToNumber:(NSNumber *)number

因为在其他情况下,您不会比较它们是否具有相同的值,而是它们是否存储在相同的内存空间中。

在第一个代码中,您将对照int检查NSNumber对象。 正确的检查是:

if([number intValue] == 0) {
    imgButton.hidden = YES;
}
在第二段代码中,您正在检查两个NSString,但必须使用“isEqualToString”方法,而不是“==”。正确的代码是:

if([number isEqualToString:@"0"]) {
    imgButton.hidden = YES;
}

有一些特殊的方法调用来比较数字和字符串。查看我的答案。尝试使用“[number intValue]==0”他正在比较NSNumber和int,您的方法中没有一个有效。@DanyData在他上一个示例中的字符串比较中有效。如果使用@(number)或[NSNumber numberwhithint:int]也可以进行数字比较。所以我的答案是正确的。我知道如果他按照应该使用的方式使用[NSNumber numberWithInt:int],数字比较会起作用,但他没有。无论如何,我同意你的方法可以用来比较数字,为此我会给你+1(但我不能给出它:(dyPaPaTa)也请考虑我不是提供代码,而是指向应该使用的方法,并且它们应该被使用,如果仅仅是为了代码整合和最佳实践的话,比如([MyNoTimeVal]=0)。在任何专业的代码评审中都会被扔到你的脸上。但不可否认,这只是关于行业标准。但是,感谢你承认我没有错;)
isEqualToNumber:@0
比使用字符串变量更灵活。说得好,谢谢!我只更正了他写的代码:),但我同意你的看法