swift ungültig timer funktioniert nicht

Ich habe dieses problem jetzt seit ein paar Tagen und ich bekomme nicht, was ich falsch mache.

Meine Anwendung ist im Grunde einfach erstellen einige Timer. Ich brauche, um Sie zu stoppen und neue zu schaffen. Aber im moment, Sie zu stoppen nicht funktioniert.

self.timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target:self, selector: "timerDidEnd:", userInfo: "Notification fired", repeats: false)

Das ist mein timer

func timerDidEnd(timer:NSTimer){
    createUnrepeatedAlarmWithUpdateInterval()
}

Weil mein timer nicht wollen, zu stoppen ich bin derzeit mit dem unrepeated timer und starten Sie es mir, nachdem es aufgehört.

func stopAlarm() {

    if self.timer != nil {
        self.timer!.invalidate()
    }
    self.timer = nil
    self.timer = NSTimer()
}

So, wie ich halt meinen timer.

alarmManager.stopAlarm()
alarmManager.createUnrepeatedAlarmWithUpdateInterval()

Nenne ich die stopAlarm() Funktion vor dem anlegen der neuen timer.

Ich weiß wirklich nicht, was ich falsch mache also ich Schätze jede Antwort 🙂

class AlarmManager: ViewController{

private var timer : NSTimer?
private var unrepeatedTimer : NSTimer?
private let notificationManager = NotificationManager()
private var current = NSThread()
private let settingsViewController = SettingsViewController()

func createRepeatedAlarmWithUpdateInterval(){

    var timeInterval:NSTimeInterval = settingsViewController.getUpdateIntervalSettings()

    if timer == nil{
    timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
        target: self,
        selector: "repeatedTimerDidEnd:",
        userInfo: "Notification fired",
        repeats: true)
    }
}
func repeatedTimerDidEnd(repeatedTimer:NSTimer){
    ConnectionManager.sharedInstance.loadTrainings(settingsViewController.getServerSettings())
    createUnrepeatedAlarm(10)
}

func createUnrepeatedAlarm(timeInterval:Double){

    unrepeatedTimer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
        target: self,
        selector: "unrepeatedTimerDidEnd:",
        userInfo: "Notification fired",
        repeats: false)
}
func unrepeatedTimerDidEnd(unrepeatedTimer:NSTimer){
    notificationManager.createNotification(self, reminderType: NotificationManager.ITEMRATINGREMINDER)
    notificationManager.createNotification(self, reminderType: NotificationManager.ITEMREMINDER)
    print("UnrepeatedAlarm ended")
}

func stopAlarm(){
    print("StopAlarm triggered")
    if (timer != nil)
    {
        print("stoptimer executed")
        timer!.invalidate()
        timer = nil
    }

    if (unrepeatedTimer != nil)
    {
        unrepeatedTimer!.invalidate()
        unrepeatedTimer = nil
    }
}
}

Das ist der gesamte code dieser Klasse. Vielleicht hilft das 😀

  • Sind Sie sicher, dass der timer nicht stoppen? Könnte es sein, die Sie erstellen, mehrere Timer?
  • Stellen Sie sicher, Sie rufen stopAlarm() aus dem Haupt-thread.
  • Ich auf jeden Fall rufen stopAlarm aus dem Haupt-thread. Ich druckte mir die thread-sicher zu sein und war es das gleiche.
  • Wenn timerDidEnd ausgeführt wird, ich Drucke eine Zeile, damit ich weiß, dass es am Ende Tat. Wenn ich stopAlarm() auf dem gleichen thread nach, der die Linie gedruckt werden soll trotzdem. Also ich glaube nicht, dass der timer Stoppt. Auch ich glaube nicht, dass es möglich, erstellen Sie mehrere Timer in diesem Fall, weil ich immer die gleiche variable verwenden, so würde es überschrieben werden, richtig? 😀
  • Die Variablen werden überschrieben, aber die Vorherige timer-wäre immer noch Links laufen, wenn es nicht dadurch entkräftet, vor dem überschreiben der variable. Mit der aktuellen code-es scheint nicht der Fall zu sein, aber Sie sagen, die Probleme sind mit der original-code, mit btw Sie sollten uns zeigen,
  • Ich stoppe den timer, bevor die neue erstellt, damit das alte gestoppt werden sollte und nicht mehr aktiv. Der ursprüngliche code hat nur etwas mehr funktion Anrufe, aber nichts, dass wäre interessant für dich, denke ich. Ich kann hinzufügen, dass es auf meine Frage, aber es ist ein bisschen mehr code 😀
  • Welchen Wert verwendest du für timeInterval?
  • Im moment bin ich mit 5 Sekunden. Aber nur zum testen. Wenn alles funktioniert, kann der Benutzer wählen Sie zwischen 15 Minuten, 30 Minuten und 60 Minuten.
  • 5 Sekunden als 5.0 an die Funktion übergeben werden richtig? (nur stellen Sie sicher, Sie werden nicht übergeben, es in ms)
  • Keine seiner 5. Die funktion arbeitet mit Sekunden. Er sagt: "Sekunden Die Anzahl der Sekunden zwischen den Zündungen der timer." Dass ein Teil der timer funktioniert perfekt. Es wird gefeuert, alle 5 Sekunden. Aber das ist nicht mein problem 😀
  • warum mein timer nicht wollen, zu stoppen ? Und was ist der Zweck, um den timer auf null und in der nächsten Zeile, um eine generische Instanz?
  • Ich nur tun dies, wie Es bereits erwähnt wurde, in der eine Antwort auf diese Frage auf einer anderen Seite. Seine nicht falsch, nicht wahr?
  • Es ist nicht falsch, aber bedeutungslos. Wenn der timer nicht läuft, es soll nil. Eine generische Instanz NSTimer() ist nicht nil aber macht eigentlich nichts.
  • okay, das ist was ich dachte. Vielen Dank für die raten!

InformationsquelleAutor Banelu | 2015-12-29
Schreibe einen Kommentar