2015-12-09 106 views
1

這一個真的讓我感到困惑。 我有一本字典,可以跟蹤錯誤和警告的次數。 那麼在if (...)區塊中,也是圖片,我正在測試0錯誤,並且出於某種原因,我試過的每個代碼組合都說錯誤數> 0爲真。if語句中的意外結果

下面是來自LLDB控制檯一些結果...

(LLDB)PO violationCounts [@ 「錯誤」]

(LLDB)PO [violationCounts [@「錯誤「]類]

__NSCFNumber

(LLDB)p violationCounts [@」 錯誤「]> 0 ...(布爾)

$ 2 =真

(LLDB)P((int)的violationCounts [@ 「錯誤」])> 0(布爾)

$ 3 =真

enter image description here

爲什麼這個評估爲違規計數> 0

+1

閱讀「NSNumber」文檔,您會發現問題。 HTH – CRD

+0

Dooohhh ...數字旁邊的(int)完全沒有怪物。甚至沒有注意到左邊的NSCFNumber,甚至沒有注意到[class]的結果。我真的需要一些睡眠。 –

回答

2

既然是保存d爲NSNumber,它應該是:

po [violationCounts[@"errors"] integerValue] > 0 
1

violationCounts[@"errors"]值是一個NSNunber因此必須將其轉換成一個整數,而不是投:

if ([violationCounts[@"errors"] integerValue] > 0) 

NSDictionaries所有值都BE對象。

要在deugger中打印它,沒有必要轉換它,因爲描述方法將被調用,並將其轉換爲顯示。但是需要使用「po」(打印對象)而不是「p」(打印):

po violationCounts[@"errors"]