Ich erstelle Timer und Schleife so.Ich kann nicht aufhören Timer
private var iteration:Int = 0
private var syncTimer:Timer? = Timer()
//MARK: - Singleton
static let synchronizationInstance:DeviceSynchronization = DeviceSynchronization()
private init(){
}
public func synchronizeAllDevices(){
let when = DispatchTime.now() + 2
DispatchQueue.main.asyncAfter(deadline: when) {
self.syncTimer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(DeviceSynchronization.synchronizeDevices), userInfo: nil, repeats: true)
self.syncTimer?.fire()
}
}
}
@objc private func synchronizeDevices(){
if iteration >= 7 {
syncTimer?.invalidate()
syncTimer = nil
iteration = 0
} else {
devicesList![iteration].synchroniseState()
iteration += 1
}
}
Wenn es sieben Wiederholungen erreicht syncTimer?.invalidate()
und syncTimer = nil
sollte syncTimer
stoppen, aber es passiert nichts. Timer funktioniert immer noch. Ich weiß nicht, hier ist ein Fehler.
Sie könnten die 'synchronizeAllDevices' wieder irgendwo in Ihrem Code genannt werden, '.invalidate()' sollte gut funktionieren – Tj3n
Soweit ich Ihren Code oben getestet (ich musste eine unausgewogene schließende Klammer verschieben), funktionierte Ihr Code wie erwartet. Wie Tj3n vorgeschlagen hat, hast du irgendwo Fehler, die du versteckst. – OOPer
Ich bin nicht sicher, wo ist die Implementierung der Klasse _DeviceSynchronization_, aber nach dem ersten Blick, dass es scheint, die '#selector (DeviceSynchronization.synchronizeDevices)' soll dies sein: '#selector (DeviceSynchronization.synchronizationInstance.synchronizeDevices) 'stattdessen; aber es ist nicht klar, ob dieser Ausschnitt aus/in der tatsächlichen _DeviceSynchronization_ Klasse oder nicht. – holex