Как я могу сделать недействительным таймер, когда таймер идет в фоновом режиме? - PullRequest
1 голос
/ 15 ноября 2011

В моем приложении я использовал таймер,

Когда таймер запускается впервые, я хочу остановить этот таймер, когда он идет в фоновом режиме,

Так что я использовал этот код для остановки таймера,

 - (void)applicationWillEnterForeground:(UIApplication *)application
{
  FirstViewController *view = [[FirstViewController alloc]init];
 [view.myticker invalidate];    //myticker is timer
    view.myticker = nil;
 [view release];
}

Я сделал недействительным таймер при вызове метода делегата Foreground,

Но когда доходит до viewcontroller старый таймер все еще работает,

Как я могу сделать недействительным таймер при работе таймера в фоновом режиме?

Ответы [ 3 ]

4 голосов
/ 15 ноября 2011

Нет необходимости переносить таймер вашему делегату, на самом деле это довольно плохая идея, так как не имеет смысла находиться там!

Вы должны соблюдать следующие уведомления (в зависимости от версии ОС, последняя в OS4 +) ...

UIApplicationWillResignActiveNotification UIApplicationDidEnterBackgroundNotification

Наблюдайте за этим из вашего контроллера представления и сделайте недействительным таймер. При повторном запуске приложения появляются соответствующие уведомления ...

UIApplicationDidBecomeActiveNotification UIApplicationWillEnterForegroundNotification

1 голос
/ 15 ноября 2011

Объявите переменную NSTimer в методе AppDelegate и синтезируйте ее. Затем, используя sharedApplication из AppDelegate, используйте эту переменную во всем проекте и не создавайте никаких новых переменных. Также выполните метод invalidate для той же переменной экземпляра.

0 голосов
/ 15 ноября 2011

В одном глобальном файле создайте время.

В методе делегата приложения

- (void)applicationDidEnterBackground:(UIApplication *)application {

    NSTimer *t ;
    if ([t isValid]) {
        [t invalidate];
    }

}

использование приведенного выше кода поможет вам остановить таймер, когда приложение переходит в фоновый режим.

...