У меня странная проблема, делающая недействительным NSTimer.Пока пользователь находится на определенном экране, мне нужно постоянно его обновлять.Я использую NSTimer для этого.Я написал следующий фрагмент кода в методе viewDidLoad.
- (void)viewDidLoad {
self.pollServerForUpdates = [NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(fetchNewDataFromServer:)
userInfo:nil
repeats:YES];
}
Проблема в том, что я пытаюсь сделать таймер недействительным.Поскольку я хочу, чтобы приложение прекратило опрашивать сервер, когда пользователь покидает экран, я поместил код аннулирования таймера в метод viewWillDisappear.
-(void) viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:YES];
//NSLog(@"%d",[self.view retainCount]);
[self.pollServerForUpdates invalidate];
self.pollServerForUpdates = nil;
}
Я использую контроллер навигации для перемещения назад и вперед между моим основным видоми вид опроса.Приложение вылетает, если я очень быстро переключаюсь между основным видом и видом опроса.Я включил NSZombie, чтобы увидеть, что происходит, и вот что я получаю
*** -[CALayer retainCount]: message sent to deallocated instance 0x1c3be0
Если я удаляю аннулирование таймера, мое приложение работает нормально.Но я хочу остановить опрос (таймер), как только пользователь покинет экран.
Я полагаю, что это происходит, потому что таймер вызывается за доли секунды до того, как открывается представление, как мне избежать этого?Нужно ли менять свой дизайн?Любая помощь будет оценена.
ps: я не могу использовать push-уведомления на этом экране.