为什么我的快速代码在加载屏幕暂停?

时间:2015-05-19 23:45:58

标签: ios swift uiviewcontroller segue

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。这段代码没有任何错误,但是当我运行它时,程序没有比加载屏幕更进一步。有什么建议吗?

2 个答案:

答案 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函数时做出反应。让您的应用程序对事件(如剩余时间的变化)作出反应,无论它们何时或如何发生,而不是试图控制确切的执行顺序。