2016-09-16 2 views
1

Я использую NSTimer для поиска обновлений в моей базе данных firebase. Я поставил код внутри своего viewDidLoad().Остановить NSTimer и закрыть диспетчер просмотра (swift)

NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true) 

Когда пользователь получил файл в базе данных Я хочу, чтобы пользователь Goto другой ViewController. Проблема в том, что либо старый ViewController работает в фоновом режиме, либо таймер не останавливается при изменении View Controller.

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)    
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("recievedMission") as! RecievedMissionViewController 
self.navigationController!.pushViewController(nextViewController, animated: true) 

Как уволить старую View Controller или как я остановить NSTimerprogrammatically? Благодаря!

ответ

4

Просто хранить экземпляр вашего таймера, а затем, когда вы переезжаете в другой контроллер аннулирует таймер, так которые сначала объявляют один экземпляр NSTimer.

var timer:NSTimer? 

Теперь этот объект используется для хранения ссылки вашего запланированногоTimer.

self.timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true) 

Теперь перейдем к другому контроллеру просто.

self.timer.invalidate() 
0

// Привет, после завершения событий таймера необходимо аннулировать этот таймер, как, как, как следовать

yourTimer.invalidate() 
1
var timer:NSTimer? 

    timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: 
    #selector(DriversInterfaceViewController.CheckFormularChild), userInfo: nil, repeats: true) 

    //ToStop Timer 

    timer.invalidate() 
    timer = nil 

Это хорошая вещь всухую переменной экземпляра таймера после того, признан недействительным, он избегает дальнейшей путаницы, если вам нужно создать еще один таймер с одной и той же переменной.

0

Когда NSTimer не отменяет действие, экземпляр контроллера просмотра остался в памяти и не вышел в ARC. Поэтому вам необходимо аннулировать NSTimer, когда старый контроллер просмотра исчезнет.

override func viewWillDisappear(animated: Bool) 
{ 
    if self.timer != nil 
    { 
     self.timer!.invalidate() 
     self.timer = nil 
    } 
} 
0

Чтобы отменить NSTimer, просто используйте:

timer?.invalidate() 

И, пожалуйста, убедитесь, что функция DriversInterfaceViewController.CheckFormularChild работает в UIThread (Если этот метод затрагивает UI), или иначе это будет крах