Какао: NSTimer GDB при признании недействительным - PullRequest
0 голосов
/ 30 декабря 2011

Я использую некоторые таймеры и хочу, чтобы пользователь мог отменить его до его завершения или удалить его из представления после его завершения.Обе эти вещи должны обрабатываться методом cancelAction.Если таймер еще не закончился, оператор if в cancelAction сообщает таймерам, что их нужно сделать недействительными, обнуляет их и удаляет представление, отображающее оставшееся время.Это работает отлично.Если таймеры уже завершены, cancelAction только удаляет представление и не пытается их аннулировать.Но это не похоже на работу.Если я отменяю до их завершения, все работает. Если я отменяю после их завершения, выдается исключение, говорящее о нераспознанном селекторе, отправленном экземпляру.Оба таймера были созданы с использованием метода scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

Разница между вызовами до или после их завершения состоит в том, что если они завершены, этот метод запускается.

- (void)timerFinished:(id)sender {
[timer invalidate];
timer = nil;
[timerLabelUpdater invalidate];
timerLabelUpdater = nil;
}

Вот где онСтранноЕсли я просто удаляю [timerLaberUpdater invalidate], метод вызывается и удаляется.Я не хочу удалять эту строку, потому что таймер отсчитывает оставшееся время и обновляет вид оставшимся временем.Если я не сделаю это недействительным, он продолжит обратный отсчет до негативов, плюс он займет память.

Я искренне не знаю, почему удаление этой строки что-то меняет, оба таймера были вызваны одинаково, и если я удалю другую строку, она все равно не будет работать, ТОЛЬКО после удаления этой инструкции что-то изменится,

Я получаю EXC BAD ACCESS в gdb, что, по-моему, означает, что селектор отправляется на выпущенный экземпляр.

Спасибо за помощь.

1 Ответ

0 голосов
/ 15 марта 2013
if([timerLabelUpdater isValid])
    [timerLabelUpdater invalidate];
...