2017-04-20 106 views
-1

我創建了一個定時器對象並設置了#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

回答

-1

。也可以放一個打印語句來檢查你的變量是否確實增加了。

+0

Baaulos也正常工作,但我的問題我要去打印(「\(strHours):\(strMinutes):\(strSeconds)」)工作,但UILabel文本沒有更新popviewcontoller和agin推viewcontroller –