2 votes

Invalider un NSTimer lors du passage en arrière-plan

J'essaie d'invalider une minuterie lorsque mon application passe en arrière-plan. La minuterie est invoquée lorsque vous appuyez sur un bouton qui démarre la minuterie et se trouve dans le fichier TimerController.m. Voici comment il est invoqué.

    mytimer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];//Timer with interval of one second
    [[NSRunLoop mainRunLoop] addTimer:mytimer forMode:NSDefaultRunLoopMode];

Maintenant, je voudrais invalider mytimer quand l'application passe en arrière-plan, donc j'ai essayé de mettre [mytimer invalidate] ; dans la méthode - (void)applicationDidEnterBackground :(UIApplication *)application du délégué de l'application. Mais cela ne fonctionnera pas puisque la méthode n'est pas déclarée dans le délégué. Je pensais qu'en incluant TimerController.h dans le délégué, cela fonctionnerait, mais ce n'est pas le cas.

Donc, je ne sais clairement pas ce que je fais ici. Pouvez-vous m'aider ? Comment faire en sorte que mytimer soit invalidé lorsque l'application passe en arrière-plan ?

11voto

zoul Points 51637

Il y a aussi un UIApplicationDidEnterBackgroundNotification notification affichée lorsque l'application passe en arrière-plan. Vous pouvez vous abonner à cette notification dans votre contrôleur et y gérer la transition :

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(goBackground)
    name:UIApplicationDidEnterBackgroundNotification
    object:nil];

// and later:
- (void) goBackground {
    [timer invalidate], timer = nil;
}

0voto

Subathra S Points 9
if (timer) {
        [timer invalidate];
        timer = nil;
    }

dans l'applicationReEnteredForeground la méthode de notification fonctionnera également

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X