2017-12-07 2 views
0

dies ich eine Timer-Funktion seting, der Code wie folgt:swift3, mein Timer kann nicht aufhören. Warum?

@IBAction func start(_ sender: UIButton) { 

    Timer.scheduledTimer(timeInterval: 1, 
         target: self, 
         selector:#selector(ViewController.action), 
         userInfo: nil, 
         repeats: true) 
} 

@objc func action() { 

    hoursMinutesSeconds() 
    if stop == true{ 
     start = false 
     timer.invalidate() 
     timer.invalidate() 
     time = 0 
    } 
} 

@IBAction func stop(_ sender: UIButton){ 

    start = false 
    timer.invalidate() 
    timer.invalidate() 
    time = 0   
} 

aber, wenn ich den Stopp func klicken, wird diese Funktion nicht. Das heißt, der Timer stoppt nicht. timer stil working ...... warum? danke für deine zeit !!

+0

Haben Sie Haltepunkte gesetzt? Wird Ihr Code ordnungsgemäß verarbeitet? – dfd

Antwort

3

Ich glaube, Sie nicht timer Wert

timer = Timer.scheduledTimer(timeInterval: 1, 
         target: self, 
         selector:#selector(ViewController.action), 
         userInfo: nil, 
         repeats: true) 
+0

Gott, du hast Recht! jetzt funktioniert dieser Code !! vielen Dank. Zwei Tage habe ich in dieser Frage. – Jack2300

+0

Gern geschehen. :) –

0

gesetzt hat sicher, dass Sie korrekte Instanz Timer sind ungültig zu machen. Wie in start function haben Sie keinem Objekt eine Timer-Instanz zugewiesen, aber in stop function verwenden Sie timer, um diesen Timer zu stoppen. Das bedeutet, dass Sie versuchen, eine Variable zu invalidieren, die niemals instanziiert wurde.

Versuchen Sie immer noch unten Funktion zu stoppen Timer, nach Zuweisung Timer-Variable.

@IBAction func stop(_ sender: UIButton) { 

     start = false 
     timer.invalidate() 
     timer = nil 
     time = 0 
    } 

Hoffnung diese Arbeit

0

Zuerst Sie es als fileprivate zu erklären haben, wie unten:

fileprivate var timer = Timer() 

@IBAction func start(_ sender: UIButton) { 

     self.timer = Timer.scheduledTimer(timeInterval: 4, 
                 target: self, 
                 selector: #selector(self.updateTimerForLocation), 
                 userInfo: nil, 
                 repeats: true) 

} 

@IBAction func stop(_ sender: UIButton) { 

    timer.invalidate() 


} 
0

Sie zwischen variablen Anschlag und func Stopp sind verwirrend.
auch nicht Sie 2 Parameter benötigen Stopp verwalten/Start Status

- für Ihre Frage, Sie den Timer-Variable in der Lage behalten sollen es in anderen func zu verwenden eine globale Timer erklärt

var timer: Timer!

dann

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(ViewController.action), userInfo: nil, repeats: true)

jetzt können Sie annullieren Sie es überall

+0

danke, ich versuche das – Jack2300

Verwandte Themen