当视图控制器不是选定的选项卡或未显示时,NSTimer停止

时间:2015-05-07 03:31:07

标签: ios swift cocoa-touch nstimer foundation

我的倒计时器有一个奇怪的问题。当我的开始按钮被击中时它会正常触发,并在我关闭应用程序并重新启动它时正确地重新实例化。但是,当我选择一个不同的标签并在那里停留一段时间时,它会停止倒计时,然后当我再次显示倒计时标签时,从它停止的位置开始倒计时。

例如,如果计时器现在处于00:28:00(格式为HH:MM:SS),请选择其他选项卡,在那里停留5分钟,然后返回计时器选项卡,它仅在27:52标记。当我关闭应用程序时(双击主页按钮,向上滑动我的应用程序)并重新打开它,它会以更合理的22:50标记开始。

我已经发布了课程中的相关代码,以显示我如何设置计时器,但总结了它的作用:

  • 我在某个地方有加号(+)和减号( - )按钮,点按时会拨打recalculate()
  • recalculate()触发CalculateOperation
  • A CalculateOperation根据新记录的添加/删除计算起始HH:MM:ss。 successBlock的{​​{1}}在主线程中执行。
  • 如果尚未创建CalculateOperation,则CalculateOperation会在NSTimer中创建successBlock
  • countdownTimer每1秒执行一次NSTimer。它会通过调用decayCalculation()calculation.timer缩短1秒。

代码:

tick()

1 个答案:

答案 0 :(得分:1)

好吧,如果我将应用程序留在其他选项卡中而不是触摸手机一段时间,它最终会进入睡眠状态,应用程序将重新启动,并进入后台,这会停止计时器。

解决方法是将我的视图控制器设置为UIApplicationWillEnterForegroundNotification的监听器,并调用recalculate来更正我的计时器的倒计时值。