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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top