2009-10-28 18 views
28

mam coś takiego:Jak sprawdzić, czy NSTimer jest aktywny czy nie?

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

Mam aktualizacji tekstu danej etykiety przy użyciu tego timera. Nie w pewnym stanie Chcę sprawdzić, czy timer jest aktywny, a następnie unieważnić timer. Moje pytanie brzmi: jak mogę sprawdzić, czy timer jest aktywny czy nie?

Odpowiedz

67

Kiedy nie powtarza się czasomierz, oznacza to, że jest nieważny, abyś mógł sprawdzić, czy jest on ważny, zanim go anulujesz (i, oczywiście, pozbywając się go).

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

W twoim przypadku masz powtarzalny licznik czasu, więc będzie on zawsze ważny, dopóki nie podejmiesz pewnych działań, aby go unieważnić. Wygląda na to, że w tym przypadku masz do czynienia z odliczaniem, więc od ciebie zależy, czy go unieważnisz i pozbędziesz się go, gdy odliczanie osiągnie żądaną wartość (w twojej metodzie updateCountdown)

+0

Wspaniały przykład! Dzięki – Genevios

5

Zatrzymaj timer w zmiennej instancji i ustaw timer = nil, gdy nie działa żaden zegar (tzn. Po wywołaniu [timer invalidate]). Następnie, aby sprawdzić, czy timer jest aktywny, możesz po prostu sprawdzić, czy timer == nil.

1

W Swift możesz użyć isValid logiczna aby sprawdzić, czy zegar jest uruchomiony:

if timer.isValid { 
    // Do stuff 
} 

z Apple docs:

wartość logiczną wskazującą, czy odbiornik jest aktualnie ważny. (tylko do odczytu)

true, jeśli odbiornik nadal jest w stanie strzelać lub jest fałszywy, jeśli timer został unieważniony i nie można już go uruchomić.

Powiązane problemy