2010-02-23 56 views
18

在Objective-C中,我有一个简单的代码块,每次按下按钮时都会递增计数器。我的日志,甚至更新了界面,显示增量为4而不是1。这只是我的格式(我正在使用%d)或其他我缺少的东西显示问题?我的猜想在于“%d”,但我是Objective-C的新手,但并不确定。 (注意,我也尝试过“反+ = 1;”具有相同的结果在Objective-C中,为什么这会增加4而不是1?

int counterValue = 0; 
NSLog(@"Count at init: %d",counterValue); 
... 

-(IBAction)pushButton { 
    NSLog(@"Count (Pre-Push) = %d",counterValue); 
    counterValue++; 
    NSLog(@"Count (Post-Push) = %d",counterValue); 
} 

输出如下:

2010-02-20 18:39:39.125 My App[37536:207] Count at init: 0 
2010-02-20 18:39:39.845 My App[37536:207] Count (Pre-Push) = 0 
2010-02-20 18:39:39.846 My App[37536:207] Count (Post-Push) = 4 
2010-02-20 18:39:40.165 My App[37536:207] Count (Pre-Push) = 4 
2010-02-20 18:39:40.166 My App[37536:207] Count (Post-Push) = 8 
2010-02-20 18:39:40.727 My App[37536:207] Count (Pre-Push) = 8 
2010-02-20 18:39:40.728 My App[37536:207] Count (Post-Push) = 12 
+1

一个nit:Action方法应该是' - (IBAction)doWhatever:(id)sender',即使你不使用sender参数。 – Wevah

+5

@ Wevah:不是。尽管单参数形式是最流行的,但所有这些方法签名对于动作方法同样有效:(1)' - (void)action',(2)' - (void)action:(id)sender',( 3)' - (void)动作:(id)sender forEvent:(UIEvent *)event'。资料来源:http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006779-RH2-SW28 –

+0

啊,你是对的。另一个UIKit/AppKit的区别很明显。 (改变你的正确性;)) – Wevah

回答

43

的代码,你正在展示肯定不应该这样做。我做了快速程序双检,我也得到了预期的结果:

2010-02-22 17:04:35.787 app[68267:a0f] Count (Pre-Push) = 0 
2010-02-22 17:04:35.790 app[68267:a0f] Count (Post-Push) = 1 
2010-02-22 17:04:35.923 app[68267:a0f] Count (Pre-Push) = 1 
2010-02-22 17:04:35.924 app[68267:a0f] Count (Post-Push) = 2 

我最好的猜测是,你有阴影counterValueint *类型的另一个变量,它使得+增加sizeof(int)而不是1.

+0

在我的.h文件中我声明“int * counterValue;” - 这是问题吗? – jbnunn

+0

@jnunn,是的。那是你的问题。如果你想要一个'int'类型的变量,不要声明一个指针。 –

+0

修复了它 - 谢谢Carl – jbnunn

相关问题