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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top