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"]