web-dev-qa-db-ja.com

NSTimerがアクティブかどうかを確認するにはどうすればよいですか?

私はこのようなものを持っています:

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

このタイマーを使用してラベルのテキストを更新しています。特定の条件ではないので、タイマーがアクティブかどうかを確認してから、タイマーを無効にします。私の質問は、タイマーがアクティブであるかどうかをどのように見つけるのですか?

28
Rahul Vyas

非繰り返しタイマーが起動すると、それ自体が無効としてマークされるため、キャンセルする前に(そしてもちろん、それを取り除く前に)まだ有効かどうかを確認できます。

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

あなたの場合、あなたは繰り返しタイマーを持っているので、あなたがそれを無効にするために何らかの行動を取るまでそれは常に有効です。この場合、カウントダウンを実行しているように見えるので、カウントダウンが目的の値に達したときに、カウントダウンを無効にして削除するのはあなた次第です(updateCountdownメソッド内)

68
Kevin

NSTimerには-isValid 方法。

8
NSResponder

タイマーをインスタンス変数に保持し、タイマーが実行されていないとき(つまり、timer = nilを呼び出した後)に[timer invalidate]を設定します。次に、タイマーがアクティブかどうかを確認するには、timer == nilかどうかを確認するだけです。

5
ianh

Swiftでは、isValidブール値を使用して、タイマーが実行されているかどうかを確認できます。

if timer.isValid {
   // Do stuff
}

Apple docs から:

受信者が現在有効かどうかを示すブール値。 (読み取り専用)

レシーバーがまだ発火できる場合はtrue、タイマーが無効になって発火できなくなった場合はfalse。

1
Crashalot