2017-04-03 11 views
0

Ich kann einen Swift Timer nicht ungültig machen.Timer macht nicht ungültig

Wenn meine Objekte und Variablen definieren, erkläre ich den Timer mit

var scoreTimer = Timer() 

beginne ich den Timer, wenn zwei Objekte mit dieser Linie kollidieren:

scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true) 

Meine updatePassengerScore Verfahren wie dieses

sieht
passengerScore -= 1 
    scoreLabel.text = String(passengerScore) 

Wenn eine andere Kollision erkannt wird, versuche ich die Tim zu stoppen er mit

aber die Variable passagierScore ist immer noch abnehmend und ich habe keine Ahnung, warum das der Fall ist. Hat jemand eine kluge Hacke, um das zu lösen und den Timer zu stoppen? Jeder Thread, den ich lese, sagt, dass scoreTimer.invalidate() eigentlich den Timer stoppen sollte. Ich bin wirklich verwirrt: -/

Antwort

1

Sie könnten mehrere Timer gestartet werden. Wenn Sie auf die Codezeile treffen, die einen Zeitgeber erstellt, bevor der aktuelle ungültig wird, haben Sie zwei aktive Zeitgeber, von denen Sie nur einen ungültig machen können.

diese Möglichkeit zu vermeiden, rufen invalidate auf scoreTimer bevor Sie einen neuen Timer erstellen:

scoreTimer.invalidate() 
scoreTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updatePassengerScore), userInfo: nil, repeats: true) 

Der andere Weg, es zu handhaben ist scoreTimer einem optionalen zu ändern, und erstellen Sie dann nur einen Timer, wenn scoreTimer ist nil.

var scoreTimer: Timer? 

... 

if scoreTimer == nil { 
    scoreTimer = Timer.scheduledTimer(... 
} 

... 

scoreTimer?.invalidate() 
scoreTimer = nil