2009-10-28 14 views
28

Ho un qualcosa di simile:Come trovare se NSTimer è attivo o no?

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

sto aggiornando il testo di un'etichetta utilizzando questo timer. Non a una determinata condizione voglio controllare se il timer è attivo quindi invalidare il timer. La mia domanda è: come faccio a sapere che il timer è attivo o no?

risposta

67

Quando un timer non ripetuto si attiva contrassegna se stesso come non valido, quindi è possibile verificare se è ancora valido prima di annullarlo (e, naturalmente, eliminarlo).

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

Nel tuo caso si dispone di un timer ripetuto in modo che sia sempre valido finché non si interviene per invalidarlo. Sembra che in questo caso si stia eseguendo un conto alla rovescia quindi spetterà a voi assicurarsi di invalidare e sbarazzarvi di esso quando il conto alla rovescia raggiunge il valore desiderato (nel metodo updateCountdown)

+0

Impressionante esempio! Grazie – Genevios

5

Tenere il timer in una variabile di istanza e impostare timer = nil quando non è in esecuzione un timer (ad esempio dopo aver chiamato [timer invalidate]). Quindi, per verificare se il timer è attivo, è sufficiente verificare se timer == nil.

1

In Swift, è possibile utilizzare il booleano isValid per vedere se il timer è in funzione:

if timer.isValid { 
    // Do stuff 
} 

Dal Apple docs:

Un valore booleano che indica se il ricevitore è attualmente valido. (sola lettura)

true se il ricevitore è ancora in grado di sparare o falso se il timer è stato invalidato e non è più in grado di sparare.

Problemi correlati