Objective c if语句中出现意外结果

Objective c if语句中出现意外结果,objective-c,nsdictionary,boolean-expression,Objective C,Nsdictionary,Boolean Expression,这件事真让我迷惑。 我有一本字典,可以记录错误和警告的数量。 在一个if(…)块中,也如图所示,我正在测试0个错误,出于某种原因,我尝试过的每一个代码组合都表明错误计数>0是正确的 以下是来自LLDB控制台的一些结果 (lldb)采购订单违规计数[@“错误”] 0 (lldb)采购订单【违规计数[@“错误”]类】 __NSCFNumber (lldb)p违规计数[@“错误”]>0(布尔) $2=正确 (lldb)p((int)违规计数[@“错误])>0(bool) $3=正确 为什么对违规行为

这件事真让我迷惑。 我有一本字典,可以记录错误和警告的数量。 在一个
if(…)
块中,也如图所示,我正在测试0个错误,出于某种原因,我尝试过的每一个代码组合都表明错误计数>0是正确的

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

(lldb)采购订单违规计数[@“错误”]

0

(lldb)采购订单【违规计数[@“错误”]类】

__NSCFNumber

(lldb)p违规计数[@“错误”]>0(布尔)

$2=正确

(lldb)p((int)违规计数[@“错误])>0(bool)

$3=正确


为什么对违规行为的评估结果为>0

因为它保存为
NSNumber
,所以应该是:

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

violationCounts[@“errors”]
的值是一个
nsnumber
,因此必须将其转换为整数,而不是强制转换:

if ([violationCounts[@"errors"] integerValue] > 0)
nsdictionary
中的所有值都是be对象

要在deugger中打印它,不需要转换它,因为将调用描述方法,这将转换它以供显示。但必须使用“po”(打印对象)而不是“p”(打印):


阅读
NSNumber
的文档,您将发现您的问题。哦,哦。。。数字旁边的(int)使我完全发疯。甚至没有注意到更左边的NSCFN编号,甚至没有注意到[class]结果。我真的需要一些睡眠。
po violationCounts[@"errors"]