簡體   English   中英

iOS:如何在swift 3中使活動中的每個計時器無效或終止?

[英]iOS: How to invalidate or kill every timer in activity in swift 3?

我想在我的應用程序中停止每個計時器。 問題是我把啟動Web服務的計時器,即使我把一些無效,似乎當我關閉ViewController時,Timer仍處於活動狀態。 我可以很容易地檢查是否存在問題,因為當我打印_currentDate時,我可以看到有幾個currentDate正在啟動,我只能看到一個currentDate(我在標簽中選擇的那個)。

可能是因為計時器的重新啟動是從DispatchQueue.main.async啟動的? 那我該怎么辦呢?

fileprivate var _refreshTimer:Timer?

func reinitTimer()
{
    stopTimer()

    if _refreshTimer == nil {
    _refreshTimer = Timer.scheduledTimer(timeInterval: TimeInterval(TIMER_PLANNING_REFRESH), target: self, selector: #selector(PlanningViewController.reloadDataTick(_:)), userInfo: nil, repeats: false)
    }
}

func stopTimer()
{
    if _refreshTimer != nil {
    _refreshTimer!.invalidate()
    _refreshTimer = nil
    }
}

func reloadDataTick(_ timer:Timer)
{
    // WebService launching with the current date that is choosen in a label with popover.

    DAL.sharedInstance.getPlanningInformation(_currentDate) { (models, error) -> Void in

            DispatchQueue.main.async {
                if error == nil
                {
                   ...

                   self.reinitTimer()
                }
           }

       }

要恢復我的問題,reloadDataTick函數永遠不會停止並且每次都會啟動,包括我選擇的所有日期,即使使用invalidate也是如此。

一個明顯的評論:刪除fileprivate屬性。 只保留

 var _refreshTimer:Timer? 

您可以在Swift3中獲得有關private / fileprivate的一些信息: https ://cocoacasts.com/what-is-the-difference-between-private-and-fileprivate-in-swift-3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM