2017-01-24 5 views
0

を終了したとき、私はのviewDidLoadでタイマーのために、以下のように右の私のコード0タイマーリーチ後にセグエを実行しようとしていますセグエを実行します。は、タイマが

override func viewDidLoad() { 
     super.viewDidLoad() 

     if timerRunning == false { 
      timerCounter = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(Counting), userInfo: nil, repeats: true) 
      timerRunning = true 
     } 

     if counter == 0 { 
      timerRunning = false 
     } 

、これが機能カウンタです:

func Counting() { 

    counter -= 1 
    timer.text = "\(counter)" 
    if counter == 0 { 
     timerCounter.invalidate() 
     timerRunning = false 
     self.performSegue(withIdentifier: "resultView", sender: self) 
    } 
} 
+0

どうしたのですか? – Yannick

+0

メイン/ UIスレッドでそのsegue操作を実行する必要があります。 – luk2302

+0

このコードを実行すると、タイマーが0になるとアプリがクラッシュする –

答えて

0

メインスレッドでsegueを実行するだけで済みます。あなたはperformSegueコールとストーリーボードまたはXIBの両方が、おそらく自己は何とかそれが必要前に割り当てを解除されているためセグエ識別子が正しい一定であれば

DispatchQueue.main.async{ 
    self.performSegue(withIdentifier: "resultView", sender: self) 
} 
+0

カウンタ== 0ならこの行を入れて、 ++ abi.dylib:NSException型のキャッチされていない例外で終了する –

+0

例外は何ですか? – milesper

0

を使用しますか?

DispatchQueue.main.async{ 

    [weak self] in 

    self?.performSegue(WithIdentifier:"resultView", sender: self) 

} 

それとも確かにperformSegueを実行する前に、オプションの連鎖自己を試してみてください。

はこれを試してみてください。

関連する問題