今天我花了一些時間追查兩個bug,最後使用相同的解決方案修復了它們。將NSNumber與NSInteger比較
既然我有解決方案,我希望能夠弄清楚它的背後。
我正在比較核心數據(Integer 16/NSNumber)與整數(ABPropertyID & ABMultiValueIdentifier)的屬性。
這個錯誤是在這個比較中,奇怪的是,只有在我殺了應用程序(從後臺托盤)後重新打開應用程序,然後運行包含比較的相同過程。反正...
這是停止後重新啓動工作:
if (myNumber.aProperty == [NSNUmber numberWithInt:anInteger]) { /* do stuff here */ }
而且這是兩個解決方案,到目前爲止,完美工作:
if ([myNumber.aProperty integerValue] == anInteger) {/* do stuff here */ }
if ([myNumber.aProperty isEqualToNumber:[NSNumber numberWithInt:anInteger]]) { /* do stuff here */ }
對我來說,它們看起來都是一樣的。我總是將NSNumber轉換爲integerValue,或將整數轉換爲NSNumber。
任何想法?
這是有道理的。有一件事很奇怪,但在我的文章中簡單提到,事實上,當我第一次運行我的應用時,這種比較實際上是有效的。只是在我殺了我的應用程序後,重新打開它,並通過比較運行應用程序,我開始看到意外的結果。在不瞭解我的應用程序或看到任何代碼的情況下,你會猜測爲什麼會發生這種情況? – djibouti33 2011-03-24 06:19:41
@ djibouti33:不是線索......(並且說這個我也指出了它的不可預測性:) – BoltClock 2011-03-24 06:21:08