2013-05-21 47 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