2017-06-28 12 views
0

私のメインのView ControllerとしてViewController Aにタイマーを実行しています。 タイマは、次のようviewDidLoad()で初期化されます。ViewControllerトランジション時のタイマーリセットを防ぐ方法

var timer = CustomizedTimer() 

、それが15分からカウントダウンを開始します。

ViewController AからSettingViewControllerにユーザーが迅速に切り替わると、タイマーは再び15分にリセットされます。

タイマーのインスタンスをAppDelegateに入れようとしましたが、動作しません。 私がしなければならないことは、ユーザがビューコントローラを切り替えるたびにバックグラウンドでタイマーを作動させることです。 これを修正するにはどうすればよいですか?ありがとうございます。

答えて

1

単にあなたのTimerを保持するためにシングルトンクラスを作成していますが、ViewController AからSettingViewControllerにプッシュする場合も、文句を言わない最初のVCはdeinitを取得し、その後、あなたのタイマーがまだ実行されます、またはあなたがviewWillAppearでタイマーを作成していますか、

TimerHelper.shared.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in 
    print("a") 
}) 

class TimerHelper { 
    static let shared = TimerHelper() 
    var timer: Timer! 
} 

は以下のようにそれを呼び出します。それは、このようにあなたのタイマー

サンプルをリセットし、再び作成されます

ブロックをターゲットに置き換えても、コードを実行するためにメインクラスを指すようにしてください。

+0

シングルトンクラスについて多くのことを聞いたことがあります。私はこれをやろうとしました。しかし、私はいくつかのチュートリアルに従っているにもかかわらず、私はそれについての手がかりを全く持っていませんでした。あなたはコードでそれを行う方法を私に見せてくれるでしょうか?私はプログラミングではかなり新しいです:) thanks – Nan

+0

私はかなりここで簡単に1つを作ることは簡単だと思う、またあなたのviewWillAppearでTimerを作成するかどうか再度チェックする必要がありますので、viewDidLoadに移動し、リセット – Tj3n

+0

これで作業する – Nan

0

申し訳ありませんが、私はあなたに完全な例を与えることはできませんが、おそらくスレッドを使用して動作を達成することができます。

関連する問題