2016-05-27 15 views
0

これはたくさん尋ねられますが、私はここで他の多くのソリューションを試してみました。Swift:ウィンドウの階層に表示されていないビュー

私はカウントダウンするクラスを持っており、カウントダウンの最後に新しいビューが始まります。ここで

はカウントダウンクラスです:

import Foundation 
import UIKit 

class CountdownController: UIViewController { 

// MARK: Properties 
@IBOutlet weak var countDownLabel: UILabel! 


var count = 3 

override func viewDidLoad() { 
    super.viewDidLoad() 


} 

override func viewDidAppear(animated: Bool) { 
      var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true) 
} 

func update() { 
    if(count > 0) { 
     countDownLabel.text = String(count--) 
    } 
    else { 
     self.performSegueWithIdentifier("goestoMathTest", sender: self) 

    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: Actions 

} 

とMathTestControllerを示した後に来るのエラーは次のとおりです。

2016-05-26 23:43:48.579 TraderMathTestiOS[18654:951105] Warning: Attempt to 
present <TraderMathTestiOS.MathTestController: 0x7fca824be7d0> on 
<TraderMathTestiOS.CountdownController: 0x7fca824b9d70> whose view is not in 
the window hierarchy! 

**編集:だから私はいくつかのことを変更し、別のを試してみましたが、I私は問題を絞り込んだと思う。私は、timerをviewDidLoad()に変更し、リピートを 'false'に変更しました。そして、MathTestControllerが1秒後に表示され、警告が表示されません。ここで変更したコードは次のとおりです。

override func viewDidLoad() { 
    super.viewDidLoad() 
      var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: false) 

} 


func update() { 
    self.performSegueWithIdentifier("goestoMathTest", sender: self) 

    if(count > 0) { 
     countDownLabel.text = String(count--) 
    } 
    else { 
     self.performSegueWithIdentifier("goestoMathTest", sender: self) 

    } 
} 

私はタイマーがMathTestControllerが呼び出された後もCountdownControllerに繰り返し続けるため、エラーが現れる理由があると思います。誰も私の元の機能(3、2、1 'を数えるタイマー)をエラーなく取得する方法を知っていますか?何とかタイマーを殺す必要があるのでしょうか?

+0

あなたはそのログメッセージの先頭を切り落としたと思われます。それの前にラインがありましたか? –

+0

@kurtRevisあなたが正しいです、私はフルテキスト – Milap

+0

を表示するためにエラーを編集したので、一度タイマーを開始します。 CountDownControllerのviewDidAppearの後に、showUp MathTestControllerにsegueを3回実行しています。 MathTestControllerを表示している瞬間、CountDownControllerのビューはwindowHierarchyにありません。あなたはそれからセグーインしています。私はそれが問題だと思う。 –

答えて

0

最後にこれを修正しました。あなたが新しいビューを開始している場合、あなたのタイマーがあなたがそれを無効にする必要があるかどうかを疑問に思っている人のために、繰り返します。固定コードは次のとおりです。

class CountdownController: UIViewController { 

// MARK: Properties 
@IBOutlet weak var countDownLabel: UILabel! 
var timer = NSTimer() 


var count = 3 

override func viewDidLoad() { 
    super.viewDidLoad() 
      timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true) 

} 


func update() { 

    if(count > 0) { 
     countDownLabel.text = String(count--) 
    } 
    else { 
     timer.invalidate() 
     self.performSegueWithIdentifier("goestoMathTest", sender: self) 

    } 
} 
関連する問題