if timerRunning == false{
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("counting"), userInfo: nil, repeats: true)
timerRunning = true
}
while timerLabel.text != "0"{
gameViewStillRunning = false
}
if gameViewStillRunning == false{
self.performSegueWithIdentifier("segue", sender: nil)
}
此代码的目的是显示倒计时的标签,然后当它达到0时,场景应切换到不同的ViewController。这段代码没有任何错误,但是当我运行它时,程序没有比加载屏幕更进一步。有什么建议吗?
答案 0 :(得分:0)
问题在于这是一个无限循环:
while timerLabel.text != "0"{
gameViewStillRunning = false
}
循环体不会改变timerLabel.text
的值,因此条件(第一行中的测试)会一直失败,循环就会永远循环 - 而代码也是如此应用程序,只是挂在那一点,永久地停止。
答案 1 :(得分:0)
看起来你在主线程上运行while
循环,它也是负责绘制UI的线程。只要该线程卡在您的while循环中,就无法继续运行循环,也没有机会更新显示或响应用户交互。
此外,如果您查看NSTimer
文档,您可能会注意到scheduledTimerWithTimeInterval
表明它Creates and returns a new NSTimer object and schedules it on the current run loop in the default mode.
该计时器正在安排对主counting
函数的调用线程的运行循环,但由于该线程永远停留在while
中,它永远不会有机会执行,所以它没有机会更新timerLabel.text
。
在轮询某些条件时,不是尝试使用while
循环阻止执行,更好的解决方案是允许运行循环继续并在计时器调用counting
函数时做出反应。让您的应用程序对事件(如剩余时间的变化)作出反应,无论它们何时或如何发生,而不是试图控制确切的执行顺序。