BOOL设置不正确,调试输出令人困惑

Ell*_*rez 0 debugging xcode boolean initialization objective-c

我试图在Xcode中设置一个BOOL,由于某种原因,它很明显拒绝工作.没有其他设置这个bool,只有这一个例子.我的代码如下:

.H

@interface SuspectsViewController : UIViewController 
{
    BOOL boolContentChanged;
}

@property (nonatomic) BOOL boolContentChanged;
Run Code Online (Sandbox Code Playgroud)

.M

@synthesize boolContentChanged;

-(IBAction)buttonPressed:(id)sender
{
    boolContentChanged = true;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用self.boolContentChanged,但也没有任何反应.为了尝试调试这个,我使用po boolContentChanged并得到以下输出,第一个po在boolContentChanged = true之前,第二个在之后.

(lldb) po boolContentChanged
(BOOL) $4 = '\0' <nil>
(lldb) po boolContentChanged
(BOOL) $7 = '\0' <nil>
Run Code Online (Sandbox Code Playgroud)

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

还有,这有什么理由会是零吗?当然它不需要隐式设置它是否是一个bool而不是一个指针?

对此我提出的任何建议都非常感谢,因为我无法解决这个问题,谢谢先进的Elliott

mor*_*ion 8

调试器(gdb)中的"po"是"print-object"的缩写.该BOOL类型不是Objective-C对象.使用"p"或"打印",以显示的值BOOL,int,char等.

调试器响应您的"po"命令输出的美元数("$ 4")将结果分配给调试器中的变量,您可以在以后的命令中使用该变量.

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

NSLog( @"In %@", NSStringFromSelector( _cmd ));
Run Code Online (Sandbox Code Playgroud)

你的-buttonPressed方法.如果您的操作实际上已被调用,您将在调试器中看到:

在buttonPressed中:

您还可以NSLog()输出您的值BOOL:

NSLog( @"Before: %d", (int)boolContentChanged );
Run Code Online (Sandbox Code Playgroud)