xcode 5.0.2布尔值混淆了

时间:2013-12-24 13:38:21

标签: ios objective-c xcode boolean

我正在使用Xcode 5.0.2并看到bool的一些奇怪行为。 当我评估从方法返回的bool时,当我将鼠标悬停在它上面时,我认为它是假的。但是,它进入if语句的true分支。当我将代码更改为

 if(validWord == false)

再次执行代码,它跳转到else分支。 (将值显示为false但解释为true)似乎正在评估bool值的相反值。

boolActingStrange

当我更改代码以测试validWord == false

if(validWord == false)

再次执行代码,它跳转到else分支。 (评估为真)似乎正在评估bool值的反面。

enter image description here

有没有人遇到过这种行为?

此外: 即使我使用BOOL,同样的行为也很明显。 enter image description here

我添加了一些NSLOG条目来测试validWord的值;

enter image description here

返回1
 NSLog(@"validWord: %i", validWord);

并为

返回YES
 NSLog(@"result is :%@",((validWord==YES)?@"YES":@"NO"));

当您将鼠标悬停在Xcode中的变量validWord上时显示NO值。 我会尝试madmik3的建议。

2 个答案:

答案 0 :(得分:0)

你可能没有意识到这一点,但是bool和BOOL之间存在巨大差异。

BOOL是一个签名的字符。因此它可以具有-128到+127的值。如果将int转换为BOOL,则编译器只占用最后8位。

bool是由C语言定义的类型。它只能有值0和1.如果将int转换为bool,如果int为零,则编译器生成0 = false,如果int为非零,则生成1 = true。

检查从返回bool更改为BOOL后返回的方法。

答案 1 :(得分:0)

有同样的问题。使用Xcode 6.当试图从NSUserDefaults获得一些价值时。重新启动没有帮助。所以我找到了解决方法。 的解决方案 启动模拟器,然后只需重置内容和设置。