Comment savoir si NSTimer est actif ou non?
-
06-07-2019 - |
Question
J'ai quelque chose comme ça:
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateCountdown)
userInfo:nil
repeats:YES];
Je mets à jour le texte d'une étiquette à l'aide de ce minuteur. Non, dans certaines conditions, je veux vérifier si la minuterie est active, puis invalider la minuterie. Ma question est de savoir comment puis-je trouver que la minuterie est active ou non?
La solution
Quand une minuterie non répétitive se déclenche, elle se marque comme non valide afin que vous puissiez vérifier si elle est toujours valide avant de l'annuler (et bien sûr de vous en débarrasser ensuite).
if ( [timer isValid] && yourOtherCondition){
[timer invalidate], timer=nil;
}
Dans votre cas, vous avez un minuteur qui se répète, il sera donc toujours valide jusqu'à ce que vous preniez des mesures pour l'invalider. On dirait que dans ce cas, vous utilisez un compte à rebours, il vous appartient donc de vous assurer de l'invalider et de vous en débarrasser lorsque le compte à rebours atteint la valeur souhaitée (dans votre méthode updateCountdown)
Autres conseils
NSTimer
utilise une méthode -isValid
.
Conservez la minuterie dans une variable d'instance et définissez timer = nil
lorsqu'aucune minuterie n'est en cours d'exécution (c'est-à-dire après l'appel de [timer invalidate]
). Ensuite, pour vérifier si la minuterie est active, vous pouvez simplement vérifier si timer == nil
.
Dans Swift, vous pouvez utiliser le booléen isValid
pour voir si le minuteur est en cours d'exécution:
if timer.isValid {
// Do stuff
}
Tiré de la documents Apple . :
Une valeur booléenne qui indique si le récepteur est actuellement valide. (lecture seule)
true si le récepteur est toujours capable de se déclencher ou false si le minuteur a été activé invalidé et n'est plus capable de tirer.