【问题标题】:BOOL not setting correctly, debug output is confusingBOOL 设置不正确,调试输出混乱
【发布时间】:2012-04-10 09:54:04
【问题描述】:

我正在尝试在 Xcode 中设置一个 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而不是指针,肯定不需要隐式设置吧?

对此的任何建议都非常感谢,因为我无法解决, 提前致谢, 艾略特

【问题讨论】:

  • Objective-C 使用 YESNO 布尔文字,而不是 truefalse。不确定这会有所帮助...
  • .h 文件中的 sn-p 不明确。我怀疑您同时拥有一个实例变量(为您合成)和一个具有相同名称的全局变量,并且您在不同的上下文中引用了不同的变量。请显示确切的代码。
  • 大家好,我曾经将它作为 bool = true,而不是 BOOL,但在定义方面确实不应该有任何区别,无论如何都会试一试。不幸的是,我的代码大约有 500 行长,但它绝对没有同名的全局变量。这就是为什么我对这件事感到如此困惑。如果发生这种情况,它通常会显示为警告,不是吗?
  • 让我以不同的方式重新问:您上面的 sn-p 中的 BOOL boolContentChanged; 是否在您的 @interface 的花括号内?喜欢@interface MyClass : SuperClass { BOOL boolContentChanged; /* other ivars */ } /* methods */ @end
  • 嗨 Ken,是的,它出现在 '@interface SuspectsViewController : UIViewController { BOOL boolContentChanged;}' 然后 '@property (nonatomic) BOOL boolContentChanged;'然后在 .m 中合成它,并使用 'boolContentChanged = true' 像上面提到的那样进行访问。没有其他对它的引用,也没有其他同名变量。我有点困惑,我想我以前遇到过这个问题,但不记得为什么......

标签: objective-c xcode debugging initialization boolean


【解决方案1】:

调试器(gdb)中的“po”是“print-object”的缩写。 BOOL 类型不是 Objective-C 对象。使用“p”或“print”显示BOOLintchar等的值

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

关于您描述的问题,您能否确认您的操作方法实际上正在被调用?尝试添加:

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

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

在按钮按下时:

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

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

【讨论】:

  • 感谢po/p的回复和信息,最近才接触到这一切,以为是什么都用了。我可以确认正在调用该方法,否则我使用 po 的断点将永远不会被命中。我还可以使用 NSLog 确认 bool 由于某种原因没有改变,我希望我能找出原因。我现在在另一台计算机上等待我的存储库拉,然后我将在上面的帖子中提交更多的调试输出。再次感谢您的帮助!
【解决方案2】:

我终于弄清楚发生了什么。关于调试器,它确实使用 YES / NO 而不是 true / false 产生了实际差异,如果我使用 p 显式查找它们,值仍在设置中,但是当使用 YES / NO 时,它们会自动显示。因此,这似乎是智能感知在某些情况下无法更新。

感谢大家的帮助。

【讨论】:

    【解决方案3】:

    当你使用 BOOL 时,你需要使用 YES 或 NO 而不是 true 和 false。

    【讨论】:

    • 这并没有什么实际区别;它们具有相同的值。
    • 和上面的理论一样,只是试过了,不幸的是它没有任何区别。
    • 我还没有尝试过,我的代码从存储库中提取后会立即尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多