Кнопка запуска запускает NSTimer, кнопка остановки останавливает его, кнопка запуска запускает его снова. Но «сделать недействительным» дает мне ошибку? - PullRequest
2 голосов
/ 10 февраля 2011

У меня есть кнопка запуска, которая запускает таймер, объявленный в файле .h. Затем у меня есть кнопка остановки, которая делает [theTimer invalidate];, а затем, когда я снова запускаю таймер с помощью кнопки запуска, это вызывает ошибку из-за того, что она была недействительной.

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

5 голосов
/ 10 февраля 2011

Документация по API очень специфична в этом отношении:
После того, как объекты таймера станут недействительными, их нельзя будет повторно использовать.

Итак, просто создайте новый таймер.Если вы делаете это только тогда, когда пользователь нажимает кнопку, это не приведет к снижению вашей производительности.

2 голосов
/ 10 февраля 2011

Класс NSTimer немного неудобен в использовании; вместо того, чтобы отделять создание / уничтожение от начала / остановки, все это объединено. Другими словами, таймер запускается, как только он создан, и останавливается, как только он уничтожается.

Поэтому вам необходимо использовать существование объекта NSTimer в качестве флага, чтобы указать, работает ли он; как то так:

// Частные методы

@ interface MyClass () { NSTimer * _timer; } - (void) _timerFired; @ Конец

@ реализация MyClass

  • (IBAction) StartTimer: (идентификатор) отправитель { если (_timer == ноль) { _timer = [NSTimer scheduleTimerWithTimeInterval: 1.0f Цель: самостоятельно селектор: @selector (_timerFired) USERINFO: ноль повторяет: ДА] сохранить]; } }

  • (IBAction) StopTimer: (идентификатор) отправителя { если (_timer! = ноль) { [_timer недействительным]; _timer = ноль; } }

  • (аннулируются) _timerFired { NSLog (@ "пинг"); }

...