Swift:3.1 UILabel文本没有在定时器中更新(每秒调用一次)

问题描述:

我创建了一个定时器对象并设置了#selector方法,在#selector方法中我的标签每次更新显示计时器倒计时值,但是当我按弹出另一个视图控制器,然后回来计时器视图控制器我的标签没有更新计时器当您使用选择尝试self.update()实际调用该函数倒计时值Swift:3.1 UILabel文本没有在定时器中更新(每秒调用一次)

override func viewDidLoad() { 
    super.viewDidLoad() 
    if timer == nil { 
    self.startTimer() 
    } 
} 

func startTimer() { 
    timer?.invalidate() 
    timer = Timer.scheduledTimer(timeInterval:1, target: self, selector: #selector(self.update), userInfo: nil, repeats: true); 
} 

func update() { 

    count += 1 
    if(count > 0){ 

     let ti = NSInteger(count) 
     let strSeconds = ti % 60 
     let strMinutes = (ti/60) % 60 
     let strHours = (ti/3600) 

     print("\(strHours):\(strMinutes):\(strSeconds)") 
     self.lblTimer.text = String(format: "%0.2d:%0.2d:%0.2d",strHours,strMinutes,strSeconds) 
    } 
} 
+0

发布创建计时器的代码以及计时器调用的函数。我的猜测是你正在viewDidLoad中创建你的计时器,它只能在视图控制器的生命周期中调用一次。如果你停止你的计时器,将顶部的另一个视图控制器,然后弹出,viewDidLoad将不会再次被调用。 –

+0

另外,请确保在从堆栈中移除视图控制器(不在'deinit')之前,在生命周期的某个时间点使您的计时器无效/无效,否则您将创建内存泄漏。 – sooper

。也可以放一个打印语句来检查你的变量是否确实增加了。

+0

Baaulos也正常工作,但我的问题我要去打印(“\(strHours):\(strMinutes):\(strSeconds)”)工作,但UILabel文本没有更新popviewcontoller和agin推viewcontroller –