2017-09-07 14 views
3

내 응용 프로그램에서 모든 타이머를 중지하고 싶습니다. 문제는 내가 웹 서비스를 시작하는 타이머를 넣는다는 것입니다. 그리고 무효화를하더라도 ViewController를 닫으면 Timer가 여전히 활동 중입니다. _currentDate를 인쇄 할 때 실행중인 여러 currentDate가 있음을 알 수 있고 단 하나의 currentDate (레이블에서 선택한 것) 만 표시해야하기 때문에 매우 쉽게 문제가 있는지 확인할 수 있습니다.iOS : 신속한 활동 3의 모든 타이머를 무효화하거나 삭제하는 방법은 무엇입니까?

타이머의 reinit가 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 기능이 중지 결코 심지어 무효화와 함께, 내가 선택한 모든 날짜, 매번 시작됩니다.

답변