此屏幕截图解释了所有内容:
屏幕截图显示调试器报告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.任何想法??
答案 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。