Как узнать, активен ли NSTimer или нет? - PullRequest
28 голосов
/ 28 октября 2009

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

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

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

Ответы [ 4 ]

68 голосов
/ 28 октября 2009

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

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

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

8 голосов
/ 28 октября 2009

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

5 голосов
/ 28 октября 2009

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

1 голос
/ 20 апреля 2016

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

if timer.isValid {
   // Do stuff
}

Из Apple Docs :

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

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

...