2010-02-23 11 views
18

En Objective-C, tengo un simple bloque de código que incrementa un contador cada vez que se presiona un botón. Mis registros, e incluso las actualizaciones de la interfaz, muestran un incremento de 4 en lugar de uno. ¿Es solo un problema de visualización con mi formato (estoy usando% d) o algo más que me falta? Mi suposición miente con el "% d" pero soy nuevo en Objective-C y no estoy seguro. . (Nota, también probé "contador + = 1;" con el mismo resultadoEn Objective-C, ¿por qué este incremento en 4 en lugar de 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); 
} 

La salida es la siguiente:

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

A nit: Los métodos de acción deben ser '- (IBAction) doWhatever: (id) remitente', incluso si no está utilizando el argumento' sender'. – Wevah

+5

@Wevah: no realmente. Mientras que la forma de un argumento es la más popular, todas estas firmas de métodos son igualmente válidas para los métodos de acción: (1) '- (void) action', (2)' - (void) action: (id) sender', (3) '- (void) acción: (id) emisor forEvent: (UIEvent *) event'. Fuente: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006779-RH2-SW28 –

+0

Ah, tienes razón . Otra diferencia de UIKit/AppKit, al parecer. (Te modifiqué por ser correcto.;)) – Wevah

Respuesta

43

El código que está mostrando seguro de que no debe hacer . hice programa rápido a DoubleCheck, y me da los resultados esperados:

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 

Mi mejor conjetura es que usted ha ensombrecido counterValue con otra variable de tipo int *, que está haciendo el + incremente por sizeof(int) en lugar de por 1.

+0

en mi archivo .h Declaro "int * counterValue;" - ¿ese es el problema? – jbnunn

+0

@jnunn, sí. Este es tu problema. Si desea una variable de tipo 'int', no declare un puntero. –

+0

que lo arregló - gracias Carl – jbnunn

Cuestiones relacionadas