NSTimerがアクティブかどうかを確認する方法は?
-
06-07-2019 - |
質問
次のようなものがあります:
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 invalidate]
を呼び出した後)に timer = nil
を設定します。次に、タイマーがアクティブかどうかを確認するには、 timer == nil
かどうかを確認します。
Swiftでは、 isValid
ブール値を使用してタイマーが実行されているかどうかを確認できます。
if timer.isValid {
// Do stuff
}
Appleドキュメントから:
受信者が現在かどうかを示すブール値 有効。 (読み取り専用)
レシーバーがまだ起動できる場合はtrue、タイマーが有効になっている場合はfalse 無効になり、発砲できなくなりました。
所属していません StackOverflow