2013-05-24 3 views
0

Я полностью понимаю, если они есть, но я ищу таймер, который приостанавливается, когда приложение входит в фоновый режим и приостанавливается после того, как пользователь вернется в приложение. Мне не нужна фоновая задача; Я просто хочу убедиться, что примерно через x минут в приложении произойдет определенное действие, будь то сегодня или завтра.Выполняют выбор после звонков после сброса, когда applicationDidEnterBackground?

Спасибо! Brett

+1

Пробовали ли вы его? Что случилось? – rmaddy

+0

@rmaddy, я прошу StackOverflow, потому что я не знаю ответа. – Brett

+1

Мое мнение состояло в том, что вместо публикации вопроса просто попробуйте и посмотрите, что произойдет. Ответьте на собственный вопрос, создав тривиальное тестовое приложение. Вы узнаете намного больше и обычно намного быстрее, чем ждать ответа. Если вы все еще не поняли, попробовав свой тест, задайте здесь вопрос и включите то, что вы пробовали, и каковы были результаты. Не бойтесь экспериментировать. Это весело. – rmaddy

ответ

1

Исходное изображение приложения (при условии, что у вас нет фоновой задачи) не «приостанавливает» таймер. Он по-прежнему учитывает теорию, поэтому, если приложение будет открыто, оно будет срабатывать, если пройдет достаточно времени. Это касается и NSTimer. (Дайте мне знать, если вы хотите получить более подробную информацию о том, почему, и я отредактирую ответ).

Рассмотрим, используя следующий код:

@implementation MyCustomClass { 
    int elapsedTime; 
    NSTimer *timer; 
} 

- (id) init { 
    if ((self = [super init])) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(applicationEnteredBackground) 
                name:UIApplicationDidEnterBackgroundNotification 
                object:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(applicationEnteredForeground) 
                name:UIApplicationDidBecomeActiveNotification 
                object:nil]; 
    } 
    return self; 
} 


- (void) applicationEnteredForeground { 
    timer = [NSTimer timerWithTimeInterval:1 
            target:self 
            selector:@selector(timerTicked) 
            userInfo:nil 
            repeats:YES]; 
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 
} 

- (void) applicationEnteredBackground { 
    [timer invalidate]; 
} 

- (void) timerTicked { 
    elapsedTime += 1; 
    // If enough time passed, do something 
} 
+0

Что произойдет, если таймер обратного отсчета истечет до открытия приложения? Подождите, пока приложение не откроется снова? – Brett

+1

С кодом выше? Нет. Обратный отсчет не будет истекать, когда приложение будет подсвечено. Если вы имеете в виду, что произойдет при использовании NSTimer или performSelectorAfterDelay, тогда да, когда таймер срабатывает, когда приложение будет открыто. – Cameron

+0

Спасибо за фантастическую помощь, Кэмерон. – Brett