2012-04-10 73 views
0

我想在Xcode中设置一个BOOL,并且由于某种原因它显然拒绝工作。没有别的设置这个布尔,只是这个例子。我的代码如下:BOOL设置不正确,调试输出令人困惑

.H

@interface SuspectsViewController : UIViewController 
{ 
    BOOL boolContentChanged; 
} 

@property (nonatomic) BOOL boolContentChanged; 

.M

@synthesize boolContentChanged; 

-(IBAction)buttonPressed:(id)sender 
{ 
    boolContentChanged = true; 
} 

我也使用self.boolContentChanged尝试,但什么也没有发生任何。为了尝试和调试,我使用了po boolContentChanged并获得以下输出,第一个po在boolContentChanged = true之前,第二个在之后。

(lldb) po boolContentChanged 
(BOOL) $4 = '\0' <nil> 
(lldb) po boolContentChanged 
(BOOL) $7 = '\0' <nil> 

是否$表示它指向某个地址,还是纯粹用于调试引用?

另外,是否有任何理由,这将是零?当然,它不需要隐式设置它是否是一个布尔值而不是指针?

对此有何建议当您使用BOOL你需要使用YES或NO不出真假是非常赞赏,因为我不能工作了, 在先进的感谢, 埃利奥特

+3

Objective-C使用'YES'和'NO'布尔文字,而不是'true'和'false'。不知道这会有什么帮助... – trojanfoe 2012-04-10 10:00:16

+3

.h文件中的代码片断不明确。我怀疑你有一个实例变量(为你合成)和一个具有相同名称的全局变量,并且你在不同的上下文中引用不同的变量。请显示确切的代码。 – 2012-04-10 11:36:16

+0

大家好,我曾经把它作为bool = true,而不是BOOL,但是在定义上真的不应该有任何区别,无论如何它会给它一个镜头。 不幸的是我的代码长度大概为500行,但是它绝对没有一个具有相同名称的全局变量。这就是为什么我对此事感到如此困惑。如果这种情况发生,它通常会显示为警告? – 2012-04-10 17:45:33

回答

0

我终于设法弄清楚发生了什么。在调试器方面,它使用YES/NO与真/假相比确实产生了实际的差异,如果我使用p来明确地找到它们,这些值仍然被设置,但是当使用YES/NO时,它们会自动显示。所以再次看来,智能感知在某些情况下未能更新。

感谢您的帮助。

-1

+0

这并没有实际的区别;它们具有相同的值。 – 2012-04-10 16:36:19

+0

http://stackoverflow.com/questions/615702/is-there-a-difference-between-yes-no-true-false-and-true-false-in-objective-c – Vervious 2012-04-10 16:59:39

+0

与上述相同的理论,只是尝试这不幸的是,它并没有任何区别。 – 2012-04-10 17:49:30

7

调试器(gdb)中的“po”是“打印对象”的缩写。 BOOL类型不是Objective-C对象。用“P”或“打印”响应于您的“PO”命令来显示的BOOL值,intchar

美元数(“$ 4”)由调试器输出被分配结果到调试器中的变量,您可以在以后的命令中使用该变量。

至于你描述的问题,你能确认你的动作方法实际上是被调用吗?尝试添加:

NSLog(@"In %@", NSStringFromSelector(_cmd)); 

到您的-buttonPressed方法。如果实际上得到调用你的行动,你会在调试器中看到这一点:

在buttonPressed:

你也可以有你的BOOLNSLog()输出的值:

NSLog(@"Before: %d", (int)boolContentChanged); 
+0

感谢有关po/p的回复和信息,直到最近才接触到它,并推测它被用于一切。我可以确认该方法正在被调用,否则我使用po的地方的断点将从未被击中。我也可以使用NSLog确认bool没有因为某种原因而改变,我希望我能弄明白为什么。此刻我在另一台计算机上等待我的存储库拉出,然后我将提交更多的调试输出到我的帖子上面。再次感谢您的帮助! – 2012-04-13 08:42:51