【发布时间】:2014-01-12 18:13:09
【问题描述】:
我正在使用 Xcode 5.0.2 并看到一些奇怪的 bool 行为。 当我评估从方法返回的布尔值时,当我将鼠标悬停在它上面时,我认为它是错误的。但是,它进入了 if 语句的真正分支。当我将代码更改为
if(validWord == false)
再次执行代码,跳转到else分支。 (将值显示为假但解释为真)它似乎正在评估与布尔值相反的值。
当我更改代码以测试 validWord == false
if (validWord == false)
再次执行代码,跳转到else分支。 (评估为真)它似乎正在评估与布尔值相反的值。
有没有人经历过这种行为?
补充: 即使我使用 BOOL,同样的行为也很明显。
我添加了一些NSLOG条目来测试validWord的值;
它返回 1
NSLog(@"validWord: %i", validWord);
并为
返回 YES NSLog(@"result is :%@",((validWord==YES)?@"YES":@"NO"));
当您将鼠标悬停在 Xcode 中的变量 validWord 上时显示 NO 值。 我会尝试 madmik3 的建议。
【问题讨论】:
-
我的猜测是调试器弹出窗口所说的是错误的,validWord 的值实际上是正确的。如果您在没有调试符号的情况下以发布模式运行代码,则可能会发生这种情况,这会使值默认为 nil。
-
您在这里混合了来自不同语言的不同习语。
BOOL、YES和NO是 Objective-C。bool、true和false是 C/C++。此外,您正在与true和false进行比较,这通常是个坏主意。如果您切换代码以始终使用 Objective-C 并且不直接与true或false进行比较,是否会出现同样的问题? -
三个问题:1) 在最后一张图中,调试器说
validWord是NO,if 语句的真分支是否运行(即[self unschedule:...]是否运行?) 2)如果你把这条线放在if(validWord):NSLog(@"validWord: %i", validWord);的正上方,输出是什么? 3)getCurrentWord的方法签名是什么? -
Johannes,1) 真正的分支运行。 2)它返回一个int值1 3)方法之前返回bool,但为了与第三个屏幕截图一致,将其更改为BOOL,它仍然进入if语句的有效分支。
-
这是一个常见的问题。能否请您粘贴代码,而不是使用屏幕截图 - 我能想到的唯一可行的解释是
if (validWord)之后的流浪;字符。粘贴代码会揭示这一点。
标签: ios objective-c xcode boolean