Как проверить, была ли произведена автоматическая аннулирование NSTimer? - PullRequest
2 голосов
/ 19 июля 2011

У меня проблема при создании NSTimer без повторения.

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

timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(updateSystems) userInfo:nil repeats:NO];

где-то в моем коде.

Если я нажму кнопку «Домой» на Iphone, мое приложение перейдет в фоновое состояние, и таймер все равно будет включен, просто остановитесь. Так что в моем applicationDidEnterBackground методе я говорю

if(timer.isValid == YES)
{
    [timer invalidate];
    timer = nil;
}

Проблема возникает, если я нажимаю кнопку «Домой» после завершения таймера. Затем таймер был выпущен, что привело к сбою при попытке доступа к isValid.

Попытка

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

приводит к тому же самому сбою, поскольку авто-аннулирование Cocoa, по-видимому, не устанавливает таймер на nil.

Как можно проверить, была ли таймер автоматически аннулирован или нет?

Спасибо.

ПРИМЕЧАНИЕ. Причина, по которой мне нужно это сделать, заключается в том, что я отправляю запрос в веб-службу, после того, как запрос был успешным (или неудачным), я запускаю таймер, который отправит новый запрос после его запуска , Если я не аннулирую таймер до его завершения, будут созданы несколько таймеров (поскольку я делаю новый запрос на applicationDidBecomeActive), выполняющих несколько запросов, когда нужен только один.

1 Ответ

3 голосов
/ 19 июля 2011

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

...