2016-07-11 8 views
0

Der Benutzer kann in einem Schieber zwischen ein paar Minuten-Intervalle wählen (3, 5, 8, 10 usw.).Recurring lokaler Benachrichtigungen NSTimer mit nicht funktionieren

Da ist es nicht möglich, eine wiederkehrende lokalen Benachrichtigungen auf individueller Zeit (nur einmal in einer Sekunde, Minute, Stunde, Tag, ...).

Ich habe einen Timer erstellt, die eine neue lokale Benachrichtigung bei der gewählten Zeit schafft. Das komische daran ist, dass es auf einem physischen iPhone 6 und iPhone 5 Simulator funktioniert. Aber nicht auf einem physischen iPhone 5, alle laufen iOS 9.3.2.

Unterhalb der Code ist, der den Zeitgeber startet, die Anzahl ist ein ganzzahliger Wert von dem Schieber geholt (3, 5, 8 ...):

@IBAction func saveSettings(sender: AnyObject) { 
    var timer = NSTimer.scheduledTimerWithTimeInterval(Double(number*60), target: self, selector: Selector("sendNotification"), userInfo: nil, repeats: true) 
    print("notification interval set to \(number)") 
} 

func sendNotification() { 
    let localNotification = UILocalNotification() 
    localNotification.fireDate = NSDate(timeIntervalSinceNow: Double(number)) 
    localNotification.alertBody = "This is a test body." 
    localNotification.timeZone = NSTimeZone.defaultTimeZone() 
    localNotification.soundName = UILocalNotificationDefaultSoundName 

    UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 
} 

Es scheint eine Art von Hardware-Differenz zu sein zwischen iPhone 5 und 6, die diese Lösung betrifft. Was ist es und was kann ich tun, damit es bei beiden funktioniert?

Antwort

0

Ich habe jetzt das Problem gelöst.

Das Problem war, dass NSTimer nicht ausgeführt, wenn die App ausgesetzt wird. Es funktionierte im Simulator, da sich die Apps dort nie zu suspendieren scheinen. Und es funktionierte wahrscheinlich auf dem physischen iPhone 6, da es genug Speicher hat, um die App nicht schnell zu unterbrechen.

So, jetzt, wenn der Benutzer 5min wählt, dann erstelle ich insgesamt 12 Benachrichtigungen mit Feuerdaten jeweils gestaffelt um 5min. Für jede Benachrichtigung wird dann ein Wiederholungsintervall auf .NSHourCalendarUnit festgelegt.

Auf diese Weise ist es möglich, wiederkehrende lokale Benachrichtigungen zu erstellen.

0

Sie benötigen UILocalNotification erstellen und es für alle Zeitintervalle planen. Und gesetzt fireDate

notification.fireDate(YOUR_TIME_INTERVAL) 
UIApplication.sharedApplication.scheduleLocalNotification(notification) 

so etwas wie für Ihren Fall mit NSTimer

func sendNotificationNew() -> Void { 
    let dateTime = NSDate() 
    var notification = UILocalNotification() 
    notification.timeZone = NSTimeZone.defaultTimeZone() 
    notification.fireDate(dateTime) 
    notification.alertBody("Test") 
    UIApplication.sharedApplication().scheduleLocalNotification(notification) 
} 

oder Code ändern

@IBAction func saveSettings(sender: AnyObject) { 
    let dateTime = NSDate().dateWithTimeIntervalSinceNow(Double(number*60)) 
    var notification = UILocalNotification() 
    notification.timeZone = NSTimeZone.defaultTimeZone() 
    notification.fireDate(dateTime) 
    notification.alertBody("Test") 
    UIApplication.sharedApplication().scheduleLocalNotification(notification) 
} 
+0

Ich habe versucht, Ihre Code-Schnipsel, aber sie kompilieren nicht. Ich habe meinen Code hinzugefügt, um eine Benachrichtigung oben zu senden, und es scheint mir ähnlich zu sein. – Ramon

+0

@Ramon deklarieren Sie Ihre lokale Benachrichtigung als eine Konstante, Sie müssen ändern "LocalNotification" zu "var localNotification" – iSashok

+0

Oh, mein Fehler. Die Deklaration wurde in var geändert und nicht in let. Aber leider funktioniert die Lösung auf einem physischen iPhone 5 immer noch nicht: - / – Ramon