2010-12-15 4 views
2

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

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 недействителен, когда приложение переходит в фоновый режим?

ответ

11

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

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

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

Great..that works..thanks – Allen 2010-12-15 16:35:50

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

в методе уведомления applicationReEnteredForeground также будет работать

Смежные вопросы