2010-12-15 84 views
2

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 le minuteur et se trouve dans le fichier TimerController.m. Voici comment il est invoqué.Invalidation d'un NSTimer en arrière-plan

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 annuler myTimer lorsque l'application passe en arrière-plan, donc j'ai essayé de mettre [myTimer invalidate]; dans la méthode d'application - (void) applicationDidEnterBackground: (UIApplication *) le délégué des applications. Mais cela ne fonctionnera pas car il n'est pas déclaré dans le délégué. J'ai pensé qu'en incluant TimerController.h dans le délégué, cela fonctionnerait, mais ce ne sera pas le cas. Donc, je ne sais pas ce que je fais ici, de toute évidence. Pouvez-vous aider? Comment l'obtenir pour que mytimer soit invalidé lorsque l'application passe en arrière-plan?

Répondre

11

Une notification UIApplicationDidEnterBackgroundNotification est également affichée lorsque l'application passe en arrière-plan. Vous pouvez vous abonner à cette notification dans votre contrôleur et de gérer la transition là:

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

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

works..thanks Great..that – Allen

0
if (timer) { 
     [timer invalidate]; 
     timer = nil; 
    } 

dans la méthode de notification applicationReEnteredForeground travaillera également