2017-02-03 20 views
0

Я пытаюсь удалить/аннулировать Timer, когда пользователь нажимает кнопку «Назад», но не при нажатии на следующий ViewController.Deinit/Invalidate Timer

var timer = Timer() 
       timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timePrinter), userInfo: nil, repeats: true) 
       timer.fire() 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewDidDisappear(animated) 
    if self.isMovingFromParentViewController{ 
     timer.invalidate() 
    } 
} 

Не работает, когда пользователь нажимает кнопку «Назад».

+0

Если есть альтернативный способ, пожалуйста, дайте мне знать. – Nitesh

+0

Вы подтвердили, что вызывается 'timer.invalidate()'? –

+0

Любой, пожалуйста, помогите мне здесь. Все еще имея этот вопрос – Nitesh

ответ

0

Fixed, добавив Timer() в viewDidAppear и viewDidDisappear я делаю timer.invalidate()

override func viewDidAppear(_ animated: Bool) { 
    if setTimer == true{ 
     timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timePrinter), userInfo: nil, repeats: true) 
     timer.fire() 
    } 
} 

override func viewDidDisappear(_ animated: Bool) { 
    super.viewDidDisappear(animated) 
     timer.invalidate() 
} 
1

Не помещайте таймер недействительным в viewWillDisappear(_:). Создайте метод deinit и поместите его туда. Когда вы нажимаете кнопку «Назад», текущий контроллер просмотра должен быть отпущен, и будет запущен метод deinit.

deinit { 
    timer.invalidate() 
} 
+2

Я пробовал это сначала, но он не работал. – Nitesh

+0

@Nitesh, если 'deinit()' не запускается, тогда ваш vc не будет выпущен, что означает, что вы держите ссылку на него. Проверьте свой код, особенно, закрытие (убедитесь, что вы используете слабую ссылку на ваш vc в закрытии). –

+0

Когда я комментирую Timer(), то deinit получает вызов, но не с таймером – Nitesh

 Смежные вопросы

  • Нет связанных вопросов^_^