30

次のようなタイマーがあります。

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

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

4

4 に答える 4

70

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

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

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

于 2009-10-28T11:16:14.350 に答える
8

NSTimer方法があり-isValidます。

于 2009-10-28T09:27:01.350 に答える
5

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

于 2009-10-28T08:31:36.670 に答える
1

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

if timer.isValid {
   // Do stuff
}

アップルのドキュメントから:

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

レシーバーがまだ発火できる場合は true、タイマーが無効化されて発火できない場合は false。

于 2016-04-19T23:16:48.393 に答える