NSTimer автоматически сохраняется? - PullRequest
1 голос
/ 01 марта 2009

У меня есть - (void) метод сохранения, который вызывается, когда пользователь нажимает кнопку панели навигации. В этом методе есть следующий NSTimer:

[NSTimer scheduledTimerWithTimeInterval:.25f target:self selector:@selector(flashBackgroundRed) userInfo: nil repeats: flashRepeat];

Таймер повторяется 4 раза, поскольку flashBackgroundRed ведет подсчет и устанавливает flashRepeat в NO после 4 нажатий. Все работает хорошо в первый раз, когда пользователь нажимает, чтобы сохранить. Но если пользователь продолжает сохранять данные с неверными данными, я сохраняю их в текущем представлении. По какой-то причине вспышки увеличиваются быстрее. Как будто каждый из них составляет 25% от предыдущего интервала. Я не сохраняю этот таймер. Он живет только в методе сохранения.

Если пользователь нажимает кнопку отмены, открывается viewB (один с NSTimer) и отображается viewA. Возвращение из viewA обратно в viewB, похоже, сбрасывает таймер invterval. Но цикл все более быстрых вспышек начинается снова. Есть идеи?

Ответы [ 2 ]

1 голос
/ 01 марта 2009

Похоже, вы планируете больше таймеров, чем вы собираетесь.

После того, как запланировано, таймеры сохраняются до аннулирования. Повторяющиеся таймеры должны быть аннулированы вручную.

Параметр повторяет указывает, будет ли таймер повторяться. Вы не можете указать, сколько раз таймер должен повторяться, только будет ли он повторяться.

Кроме того, подпись метода для вашего селектора неверна. Это должно выглядеть как

-(void)timerFireMethod:(NSTimer*)theTimer

В вашем обратном вызове таймера вы можете определить, хотите ли вы, чтобы таймер продолжал повторяться или нет; если нет, позвоните [таймер аннулировать].

1 голос
/ 01 марта 2009

NSTimer сохраняется циклом выполнения, пока он запланирован.

Похоже, проблема в том, что вы продолжаете создавать эквивалентные повторяющиеся таймеры в несколько разное время, поэтому они визуально объединяются в один эффект с другой частотой, чем вы хотите. Попробуйте сохранить ссылку на таймер и сделать ее недействительной, когда вы собираетесь создать новую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...