2016-10-24 10 views
0

ビープ音を鳴らすためにボタンをクリックし、バックグラウンドスレッドとして、ビューコントローラにウェルカムメッセージが表示されると、ビープ音はアプリケーションを閉じるまで継続します。 ウェルカムメッセージがビューコントローラに到着したときに、さらに実行するためにキューを一時停止するにはどうすればよいですか?呼び出しのためのdispatch_async要求への要求の送信を停止する方法はありますか?

私は別のビューコントローラdispatch_suspend(dispatch_get_main_queue());から電話をかけましたが、ウェルカム画面が表示されてもビープ音はバックグラウンドで連続しています。誰かがキューの実行を停止するか、単にキューをクリーンアップするように指示できますか?

makeBeep関数で
dispatch_async(dispatch_get_main_queue(), ^{ 
    NSInteger timeintervalForBeep; 
    if (_bu.buModel == BuTwo) { 
     timeintervalForBeep = 7; 
    } else { 
     timeintervalForBeep = 2; 
    } 

    _findBeepTimer = [NSTimer scheduledTimerWithTimeInterval:timeintervalForBeep 
                 target:self 
                selector:@selector(makeBeep) 
                userInfo:nil 
                repeats:YES]; 
    // Fire it once immediately. 
    [_findBeepTimer fire]; 
}); 
+0

コール[_findBeepTimer無効化]。あなたのmakeBeepメソッドで。 Btw、すぐに発射するので、あなたのタイマーは無駄です:なぜあなたはすぐにビューを更新していないのですか?タイマーを作成して起動する方法は、メソッドを呼び出す方法と同じです。 –

+0

停止ボタンに[_findBeepTimer invalidate]がありますが、開始画面が表示されたら、表示コントローラーが変更され、ビープ音がバックグラウンドで行われているので、キャンセルするオプションはありません。しかし、通常、私はボタンでそれを開始し、それは私のためにうまく動作するボタンで終了します。 –

+0

コードを追加することをお勧めします。タイマーの開始は、アーキテクチャの背後にあるアイデアのように見える間に投稿したばかりです。 –

答えて

0

、以下のコードを追加することにより、タイマを無効にする:

[_findBeepTimer invalidate]; 
_findBeepTimer = nil; 
+0

停止ボタンに[_findBeepTimer invalidate]がありますが、開始画面が表示されたら、表示コントローラーが変更され、ビープ音がバックグラウンドで行われているので、キャンセルするオプションがありません。しかし、通常、私はボタンでそれを開始し、それは私のためにうまく動作するボタンで終了します。 –

+0

他のビューコントローラにnsnotificationを作成してそこに停止してみてください –

関連する問題