2012-05-26 21 views
32

Necesito llamar a un método cuando se inicia mi aplicación y luego llamar al mismo método cada 5 segundos.¿Cómo desencadenar NSTimer de inmediato?

Mi código es bastante simple:

// Call the method right away 
[self updatestuff:nil] 

// Set up a timer so the method is called every 5 seconds 
timer = [NSTimer scheduledTimerWithTimeInterval: 5 
              target: self 
             selector: @selector(updatestuff:)  
             userInfo: nil 
             repeats: YES]; 

¿Hay una opción para el temporizador de disparo por lo que es inmediato y luego cada 5 segundos?

Respuesta

65

NSTimer 's -fire, [timer fire]; es lo que estás buscando.

Eso disparará/llama inmediatamente al temporizador para descartar el retraso.

13

No puede programar el temporizador y disparar el evento inmediatamente todo en la misma línea de código. Entonces debes hacerlo en 2 líneas de código.

En primer lugar, programar el temporizador, a continuación, llamar de inmediato 'fuego' en su cronómetro:

timer = [NSTimer scheduledTimerWithTimeInterval: 5 
             target: self 
            selector: @selector(updatestuff:)  
            userInfo: nil 
            repeats: YES]; 
[timer fire]; 

Cuando el fuego se llama, el intervalo de tiempo que el temporizador de espera para disparar restablecerá porque acaba de funcionar, y luego continuará ejecutándose posteriormente en el intervalo designado, en este caso, cada 5 segundos.

3

Puede inicializar el temporizador y el fuego en la misma línea:

[(checkStatusTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(checkStatusTimerTick:) userInfo:nil repeats:YES]) fire]; 
+1

sintaxis muy bonito! – loretoparisi