2009-10-28 35 views
28

que tienen un algo como esto:¿Cómo puedo saber si NSTimer está activo o no?

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                target:self 
               selector:@selector(updateCountdown) 
               userInfo:nil 
                repeats:YES]; 

Estoy actualizando el texto de una etiqueta de utilizar este programador. No estoy en una condición determinada, quiero verificar si el temporizador está activo, entonces invalidar el temporizador. Mi pregunta es ¿cómo puedo encontrar que el temporizador está activo o no?

Respuesta

67

Cuando se dispara un temporizador no repetitivo, se marca a sí mismo como no válido para que pueda verificar si aún es válido antes de cancelarlo (y, por supuesto, librarse de él).

if ([timer isValid] && yourOtherCondition){ 
    [timer invalidate], timer=nil; 
} 

En su caso tiene un temporizador de repetición por lo que siempre será válido hasta que tome alguna medida para invalidarlo. Parece que en este caso está ejecutando una cuenta regresiva por lo que dependerá de usted asegurarse de invalidar y deshacerse de ella cuando la cuenta regresiva alcance el valor deseado (en su método updateCountdown)

+0

Ejemplo impresionante! Gracias – Genevios

5

Mantenga el temporizador en una variable de instancia y establezca timer = nil cuando no haya ningún temporizador en ejecución (es decir, después de llamar al [timer invalidate]). Luego, para verificar si el temporizador está activo, simplemente puede verificar si timer == nil.

1

En Swift, puede usar la isValid booleano para ver si el temporizador está en marcha:

if timer.isValid { 
    // Do stuff 
} 

Desde el Apple docs:

Un valor booleano que indica si el receptor está actualmente válida. (solo lectura)

true si el receptor todavía es capaz de disparar o falso si el temporizador ha sido invalidado y ya no es capaz de disparar.

Cuestiones relacionadas