2017-02-03 23 views
0

Ich versuche Timer zu deaktivieren/ungültig zu machen, wenn der Benutzer die Taste zurückdrückt, aber nicht, wenn er zum nächsten ViewController drückt.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() 
    } 
} 

Es funktioniert nicht, wenn der Benutzer die Zurück-Taste drückt.

+0

tun Wenn es dann eine beliebige alternative Art und Weise ist es mich wissen lassen Sie es. – Nitesh

+0

Haben Sie überprüft, dass 'timer.invalidate()' aufgerufen wird? –

+0

Bitte helfen Sie mir hier draußen. Immer noch dieses Problem – Nitesh

Antwort

0

es behoben, durch Timer() in viewDidAppear Hinzufügen und auf viewDidDisappear Ich bin 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

Den Timer nicht in viewWillDisappear(_:) ungültig machen. Erstellen Sie eine Deinit-Methode und legen Sie sie dort ab. Wenn Sie die Zurück-Taste drücken, sollte der aktuelle View-Controller freigegeben werden und die Deinit-Methode wird ausgelöst.

deinit { 
    timer.invalidate() 
} 
+2

habe ich zuerst versucht, aber es hat nicht funktioniert. – Nitesh

+0

@Nitesh, wenn 'deinit()' nicht ausgelöst wird, wird dein VC nicht freigegeben, was bedeutet, dass du einen starken Hinweis darauf hast. Überprüfen Sie Ihren Code, vor allem, Closures (stellen Sie sicher, dass Sie schwache Referenz zu Ihrem VC in Schließungen verwenden). –

+0

Wenn ich Timer() auskommentieren, dann wird deinit aufgerufen, aber nicht mit Timer – Nitesh