在询问UIButton值时,为什么XCode调试器输出与我的预期不匹配?

时间:2009-12-31 18:11:35

标签: objective-c xcode debugging

此屏幕截图解释了所有内容:   alt text

屏幕截图显示调试器报告buttonType为2,但控制台显示按钮类型= 0.调试器和控制台中显示相同的变量。知道这种不匹配是如何发生的吗?

(gdb) po ((UIButton *)control).buttonType

没有名为buttonType的成员。

根据要求:

    NSLog(@"################ CALL OUT ACCESSORY TAPPED: set pinColor to RED in call out accessory tapped");
    NSLog(@"################ CALL OUT ACCESSORY TAPPED: UIButtonTypeDetailDisclosure = %d",UIButtonTypeDetailDisclosure);
    NSLog(@"################ CALL OUT ACCESSORY TAPPED: control button type = %d", ((UIButton *)control).buttonType);

    if (((UIButton *)control).buttonType == 2) {
        NSLog(@" ############# CALL OUT ACCESSORY TAPPED: in buttonType = disclosure");
        leftCallOutButton.available = YES;
    }

if语句的计算结果为false !!试图理解为什么buttonType被报告为2(如果事实是用类型2创建的话)

作为Mike的要求:

(gdb) p (int) [((UIButton *)control) buttonType]
$1 = 0
2009-12-31 14:04:26.821 iParkNow![4432:207] ################ CALL OUT ACCESSORY TAPPED: control button type = 0
(gdb) p (int) [((UIButton *)control) buttonType]

好的,所以这更有意义。现在的问题是为什么buttonType从2变为0?它用buttonType 2创建,并以某种方式变为0.任何想法??

1 个答案:

答案 0 :(得分:2)

_buttonFlags是一个私有实例结构。你不应该担心它。唯一能够“保证”按预期工作的是公共API - 实现细节可能会发生变化。

(作为旁注,以_开头的变量通常是私有实例变量)

在您的情况下,请尝试p (int) [((UIButton *)control) buttonType]

您还可以考虑创建一个断点操作,以便在您设置的断点处记录您想要的任何内容。有关详细信息,请参阅http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/XcodeDebugging/200-Managing_Program_Execution/program_execution.html