Вопрос

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

Я использую уведомления, чтобы понять, когда сделать таймеры недействительными/создать.

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_didBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify_willResigneActive:) name:UIApplicationWillResignActiveNotification object:nil];

Вот что содержит метод notify_didBecomeActive:

clockTicker = [[NSTimer scheduledTimerWithTimeInterval: 1  
                                            target: self  
                                          selector: @selector(showActivity)  
                                          userInfo: nil  
                                           repeats: YES] retain];

alarmTicker = [[NSTimer scheduledTimerWithTimeInterval: CONST_ALARMTIMER  
                                               target: self  
                                             selector: @selector(checkAndLaunchAlarm)  
                                             userInfo: nil  
                                              repeats: YES] retain];

Этот метод notify_willResigneActive содержит:

if (alarmTicker) {
    [alarmTicker invalidate];
    [alarmTicker release];
    alarmTicker = NULL;
}

if (clockTicker) {
    [clockTicker invalidate];
    [clockTicker release];
    clockTicker = NULL;
}

Проблема в том, что когда я отлаживаю это при втором отключении таймера, я получаю ошибку.Странно то, что если я переключу порядок таймеров (например, сначала объявлю недействительным clockTicker)..Я все еще получаю ошибку на втором таймере.

Что я могу делать неправильно?

Спасибо, Леонардо

Это было полезно?

Решение

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

Другие советы

Вам просто нужно установить для AlarmTicker и clockTicker значение nil внутри методов, которые срабатывают эти таймеры, и таким образом, когда вы будете проверять, будут ли (alarmTicker) или if ( clockTicker) иметь правильное значение.

Я не уверен, что делает установка таймера на NULL в отличие от установки его на ноль, но я знаю, что если вы выполняете вызов нулевого объекта, это не работает.Если вы вызываете объект NULL, он думает, что происходит сбой, хотя я это не проверял.Этот пост может помочь: NULL против нуля в Objective-C

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top