if语句中出现意外结果

时间:2015-12-09 18:27:53

标签: objective-c nsdictionary boolean-expression

这个真的让我神秘化了。 我有一本字典,用于跟踪错误和警告的数量。 好吧,在if (...)区块中,如图所示,我正在测试0个错误,并且出于某种原因,我尝试过的每个代码组合都表示错误计数> 0 是真的。

以下是LLDB控制台的一些结果......

  

(lldb)po violationCounts [@“errors”]

     

0

     

(lldb)po [violationCounts [@“errors”] class]

     

__ NSCFNumber

     

(lldb)p violationCounts [@“errors”]> 0(布尔)

     

$ 2 = true

     

(lldb)p((int)violationCounts [@“errors”])> 0(布尔)

     

$ 3 = true

enter image description here

为什么评估 violationCounts是> 0

2 个答案:

答案 0 :(得分:2)

由于它保存为NSNumber,因此应该是:

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

答案 1 :(得分:1)

violationCounts[@"errors"]的值是NSNunber,因此必须将其转换为整数,而不是强制转换:

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

NSDictionaries中的所有值都是对象。

要在取消器中打印它,没有必要转换它,因为将调用描述方法并将其转换为显示。但是必须使用“po”(打印对象)而不是“p”(打印):

po violationCounts[@"errors"]