Вы нарушили MVC (Model-View-Controller), поместив свои данные в свой контроллер представления.Более того, вы просите механизм без твердых обещаний о времени (NSTimer
), чтобы отслеживать время для вас.NSTimer
не запускает точно в интервале, который вы запрашиваете.Он может стрелять в любой произвольной точке после этого интервала. Использование NSTimer
в качестве секундомера почти всегда будет терять время (иногда довольно много времени, особенно при наличии прокрутки). (Этот последний бит завышен. Повторяющийся таймер правильно планирует себя, поэтому победил 'обычно теряет время. Вы просто потеряете время, если повторение будет полностью пропущено, что может произойти во время длинных прокруток или других вещей, которые могут удерживать таймеры для срабатывания в течение полной секунды.)
Создание нового объекта моделихранить информацию о секундомере.Давайте назовем это Stopwatch
.Предполагая, что вам нужно, чтобы он был запускаемым и останавливаемым, ему нужны свойство NSTimeInterval accumulatedTime
и свойство NSDate lastStarted
(вы также можете сделать lastStarted
NSTimeInterval
, если хотите).Таким образом, чтобы запустить секундомер, вы установите lastStarted
на «сейчас».Чтобы остановить секундомер, вы очищаете lastStarted
и перемещаете текущее накопленное время в accumulatedTime
.Чтобы узнать текущее время, вы добавляете accumulatedTime
к now - lastStarted
.
ОК, теперь, когда у вас есть это, что вы можете с ним сделать?Вы можете передать его своим контроллерам представления, и они могут спросить "каково текущее значение секундомера?"Они могут запускать и останавливать его по своему усмотрению.
Теперь ваш контроллер представления хотел бы обновлять свой дисплей каждую секунду, поэтому у вас есть таймер, который делает это.Каждую секунду он спрашивает секундомер «каково текущее время» и отображает его.Но он не устанавливает время.Он просто спрашивает.
Кстати, вы также можете использовать KVO на Stopwatch
, но это немного сложнее, поскольку Stopwatch
необходимо запустить собственный таймер для отправки уведомлений об изменениях.Я обычно нахожу это больше проблем, чем стоит.