質問

次のようなものがあります:

 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   無効になり、発砲できなくなりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top