私はこのようなものを持っています:
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 docs から:
受信者が現在有効かどうかを示すブール値。 (読み取り専用)
レシーバーがまだ発火できる場合はtrue、タイマーが無効になって発火できなくなった場合はfalse。