Como descobrir se NSTimer está ativa ou não?
-
06-07-2019 - |
Pergunta
Eu tenho um algo como isto:
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateCountdown)
userInfo:nil
repeats:YES];
Estou atualizando o texto de um rótulo usando este temporizador. Não em uma determinada condição Quero verificar se o temporizador está activo, então invalidar o timer. A minha pergunta é como faço para descobrir que o temporizador está activo ou não?
Solução
Quando um não repetir incêndios temporizador de TI em si marcas como inválida para que possa verificar se ainda é válido antes de cancelá-lo (e, claro, em seguida, livrando-se do mesmo).
if ( [timer isValid] && yourOtherCondition){
[timer invalidate], timer=nil;
}
No seu caso você tem um temporizador repetindo assim que sempre será válida até que você tomar alguma ação para invalidar-lo. Looks como neste caso você estiver executando uma contagem regressiva por isso vai ser até você para ter certeza de invalidar e livrar-se dele quando a contagem atinge o valor desejado (No seu método de updateCountdown)
Outras dicas
NSTimer
tem um método -isValid
.
Mantenha o temporizador em uma variável de instância, e conjunto timer = nil
quando não há temporizador em execução (ou seja, depois que você chamar [timer invalidate]
). Então, para verificar se o timer estiver ativo, você pode apenas verificar se timer == nil
.
Na Swift, você pode usar o boolean isValid
para ver se o temporizador está em execução:
if timer.isValid {
// Do stuff
}
A partir da a Apple docs :
Um valor booleano que indica se o receptor está atualmente válido. (Somente leitura)
true se o receptor ainda é capaz de disparar ou falso se o temporizador foi invalidados e não é mais capaz de disparar.