2017-09-07 22 views
3

Je voudrais arrêter tous les minuteurs dans mon application. Le problème est que je mets un timer qui lance Web Services, et même si je mets un peu d'invalide, il semble que quand je ferme le ViewController, le Timer est toujours en activité. Je peux vérifier qu'il y a un problème très facilement parce que quand j'imprime le _currentDate, je peux voir qu'il y a plusieurs currentDate qui lancent et je dois seulement voir un currentDate (celui que je choisis dans une étiquette).iOS: Comment invalider ou tuer chaque timer en activité dans swift 3?

Peut-être est-ce parce que la réinitialisation de la minuterie est lancée à partir d'un DispatchQueue.main.async? Alors, comment puis-je l'arrêter?

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() 
       } 
      } 

     } 

Pour reprendre mon problème, la fonction reloadDataTick ne cesse jamais et est lancé à chaque fois, avec toute la date que je choisis, même avec l'invalident.

Répondre