2015-05-02 3 views
-1

У меня есть NSTimer, который должен работать, когда приложение находится на переднем плане, но должно прекратиться, когда приложение переходит на задний план. но если придет снова на передний план, таймер не работает. Есть ли способ сделать это?NSTimer не работает после сброса

inbox.m

(viewDidLoad){ 
    myTimer = [NSTimer scheduledTimerWithTimeInterval: 0.60 target: self selector: @selector(saveSlow) userInfo: nil repeats: YES]; 
    if([[NSUserDefaults standardUserDefaults] boolForKey:@"enterBG"]==YES) 
    { 
     [myTimer invalidate]; 
     myTimer = nil; 
    } 
.... 
} 
+0

Вам нужно подписаться на уведомления обожженных, когда приложение входит передний план/фон. – luk2302

+0

, но как только nstimer остановился, а затем он не работает после этого. – Jan

+0

Вам нужно предоставить гораздо больше контекста, чем это. –

ответ

0

Вы сбросили значение bool enterBG после того, как приложение вступит на передний план? Если нет, даже таймер будет сгенерирован, он будет снова признан недействительным.

Другой момент, вы создали свой таймер в -viewDidLoad, как правило, цикл жизненного цикла просмотра вызывает его только один раз. В следующий раз, когда ваше приложение появится на переднем плане, оно не будет вызываться. Возможно, это еще одна причина, по которой ваш таймер не будет работать снова. Вместо этого вы можете попробовать поставить его на -viewWillAppear:. Вам нужно вызвать фрагмент кода вручную.

И предложение, вы бы лучше использовать соответствующие уведомления для обработки таймера:

UIApplicationDidEnterBackgroundNotification 
UIApplicationWillEnterForegroundNotification 
0

вы не можете попробовать этот код в проекте

UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid; 
    UIApplication *app = [UIApplication sharedApplication]; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
     [app endBackgroundTask:bgTask]; 
    }]; 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.60 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES]; 
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 



-(void) timerMethod{ 

    NSLog(@"in Vijay yadav "); 
} 
0

Попробуйте удалить:

[myTimer invalidate]; 
myTimer = nil; 

Как таймер перестанет работать в фоновом режиме после 3 минут. Когда вы выходите на передний план, он автоматически запускается. Недействительными и нулями вы удаляете экземпляр вашего таймера. В этом случае вам снова нужно настроить таймер.

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