У меня проблема при создании 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
), выполняющих несколько запросов, когда нужен только один.