Вопрос

У меня есть что-то вроде этого:

 NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                   target:self
                                                 selector:@selector(updateCountdown)
                                                 userInfo:nil
                                                  repeats:YES]; 

Я обновляю текст метки, используя этот таймер. Не в определенном состоянии, я хочу проверить, активен ли таймер, а затем аннулировать таймер. У меня вопрос, как мне узнать, активирован ли таймер или нет?

Это было полезно?

Решение

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

if ( [timer isValid] && yourOtherCondition){
    [timer invalidate], timer=nil;
}

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

Другие советы

NSTimer имеет метод -isValid .

Сохраняйте таймер в переменной экземпляра и устанавливайте timer = nil , когда таймер не запущен (т.е. после вызова [timer invalidate ). Затем, чтобы проверить, активен ли таймер, вы можете просто проверить, является ли timer == nil .

В Swift вы можете использовать логическое значение isValid , чтобы проверить, работает ли таймер:

if timer.isValid {
   // Do stuff
}

Из документации Apple

  

Логическое значение, которое указывает, является ли получатель в данный момент   действительный. (Только для чтения)      

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top