Отменить NSTimer при переходе в фоновый режим - PullRequest
2 голосов
/ 15 декабря 2010

Я пытаюсь сделать недействительным таймер, когда мое приложение переходит в фоновый режим.Таймер запускается при нажатии кнопки, которая запускает таймер и находится в файле TimerController.m.Вот как это вызывается.

    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];

Теперь я хотел бы сделать недействительным mytimer, когда приложение переходит в фоновый режим, поэтому я попытался поместить [mytimer invalidate];в - (void) applicationDidEnterBackground: (UIApplication *) метод приложения, который делегируют приложения.Но это не сработает, так как он не объявлен в делегате.Я подумал, включив TimerController.h в делегат, это сработает, но не сработает.

Итак, я явно не знаю, что я здесь делаю.Вы можете помочь?Как это сделать так, что mytimer становится недействительным, когда приложение переходит в фоновый режим?

Ответы [ 2 ]

11 голосов
/ 15 декабря 2010

Существует также уведомление UIApplicationDidEnterBackgroundNotification, когда приложение переходит в фоновый режим. Вы можете подписаться на это уведомление в вашем контроллере и обработать переход там:

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

// and later:
- (void) goBackground {
    [timer invalidate], timer = nil;
}
0 голосов
/ 19 февраля 2015
if (timer) {
        [timer invalidate];
        timer = nil;
    }

в методе applicationReEnteredForeground также будет работать

...