2013-11-15 70 views
-2

我有一個解析HTML的方法。在那裏有一個if/else語句:隨機調用if和else語句

if ((NSNumber1 == NSNumber2)) { 
    NSLog(@"dafuq1?"); 
} else { 
    NSLog(@"dafuq2?"); 
} 

日誌有時是這樣的:

...:dafuq1?

...:dafuq2?

所以這兩個部分都被調用。但其他時候,只有其中一個被稱爲!爲什麼?

Btw。的iOS 7.0.4,5.0.1的Xcode

而且 (NSNumber1 == NSNumber2)是真的

+2

http://stackoverflow.com/questions/6605262/comparing-nsnumbers-in-objective-c – thelaws

+6

我真的建議使用** **駝峯符號。 –

+0

你是說有時候在一個調用中執行if **和** else分支嗎? –

回答

6

這些對象。您不能使用==來比較相等性。使用isEqualToNumber:

if ([NSNumber1 isEqualToNumber:NSNumber2]) 
+0

除非你想看看它們是否是同一個對象。 – Macondo2Seattle

+0

@BlackRider當然。但這不是這種情況。 – rmaddy

+3

@BlackRider同樣,比較指針相等的'NSNumber'實例是創建令人困惑的錯誤的一個可靠的方法。在某些平臺上,從-2到11的數字是共享實例。在其他平臺上,帶標籤的指針意味着-2^55..2^55(或^ 56?)將是有效的共享實例(儘管它們實際上並未實際上由分配支持)。 – bbum