2013-05-21 50 views
-1

当我的NSLog检查数的值它显示“0”条件总是失败虽然比较值似乎是正确的iOS中

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; 
    } 

但是这里的情况也失败了,这是什么问题?

+0

尝试使用“[数字的intValue] == 0” – Inoka

回答

4

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

if([number intValue] == 0) { 
    imgButton.hidden = YES; 
} 

在你正在查看两台NSString的第二个代码,但你必须使用“isEqualToString”的方法,而不是“==”。正确的代码是:

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

'isEqualToNumber:@ 0'会比使用字符串变体更灵活 – Till

+0

好点,谢谢!我只更正了他写的代码:),但我同意你的看法 –

1

NSNumber是一个对象,0是一个整数(原始类型)。他们永远不会平等。但是你可以改变这样的比较,如[number intValue] == 0,当你的NSNumber的值是0时,这将起作用。

+0

有特殊的方法调用来比较数字和字符串。看到我的答案。 – katzenhut

0

在字符串比较,您应该使用方法

isEqualToString:NSString *)string 

的比较。

对于NSNumbers其

isEqualToNumber:(NSNumber *)number 

因为否则你的arent比较,如果它们具有相同的价值,但如果它们存储在相同的内存空间。

+0

他正在比较一个NSNumber与一个int,非你的方法将工作。 – danypata

+0

@danypata它将在他最后一个例子中的字符串比较中起作用。如果您使用@(数字)或[NSNumber numberWithInt:int],那么数字比较也可以正常工作。所以我的回答是正确的。 – katzenhut

+0

我知道如果他使用[NSNumber numberWithInt:int],那么数字比较就可以工作,但他没有。无论如何,我同意你的方法可以用来比较数字,因为我会给你+1。 ;)(但我不能放弃: – danypata