2016-06-14 19 views
1

Ich arbeite mit lokaler Benachrichtigung auf iOS, aber ich habe einige Probleme, wenn iOS versucht, die Benachrichtigungen zu erstellen. Einige von ihnen sind geschaffen, andere nicht.Das gleichzeitige Erstellen mehrerer lokaler Benachrichtigungen schlägt fehl

Nachdem ich meinen Code sehr oft gelesen habe, habe ich festgestellt, dass er an der Stelle fehlgeschlagen ist, an der er die lokale Benachrichtigung erstellt hat.

UIApplication.sharedApplication().scheduleLocalNotification(notification) 

Der einzige Grund, warum ich denken konnte, war, dass die Meldungen in einer Schleife zu schaffen, um die 50-60-Benachrichtigungen, war zu viel für iOS zu verarbeiten. Ich mache es so, weil alle Benachrichtigungen eine andere Zeit und einen anderen Tag haben und zu verschiedenen Dingen gehören.

Dies ist mein Block der lokalen Meldungen zu erstellen:

let createdUid = self.generateNotificationUUID() 

    // create a corresponding local notification 
    let notification = UILocalNotification() 

    /* Time and timezone settings */ 
    notification.fireDate = self.buildTime() 
    notification.repeatInterval = NSCalendarUnit.WeekOfYear 
    notification.timeZone = NSTimeZone.systemTimeZone() 

    /* Information settings */ 
    notification.alertBody = "Sector \(notificationData["sector"]!): located at \(notificationData["name"]!) closes in 15 min." 
    notification.alertAction = "Open" 

    /* Badge settings */ 
    notification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1 
    notification.soundName = "ring.caf" 
    notification.userInfo = ["UUID": createdUid, ] 

    /* Schedule the notification */  
UIApplication.sharedApplication().scheduleLocalNotification(notification) 

Und dieser Code in einer Schleife. Dieselbe Schleife vor dem Aufrufen der Benachrichtigungserstellung baut das Array notificationData dynamisch auf.

Das Benachrichtigungsdaten-Array enthält den Sektor, den Namen sowie die Uhrzeit und den Tag.

Uhrzeit und Tag werden verwendet, um das Benachrichtigungsfeuerdatum zu berechnen. Sektor und Name werden für den Alert-Hauptteil verwendet. Und alle vier Werte werden verwendet, um die UID (UUID) zu generieren.

Wenn ich einen Ausdruck und entfernen Sie die UIApplication.sharedApplication() ... alle Daten sehen gut aus und was es sein muss.

Ich habe versucht, das Problem zu lösen,

dispatch_async (dispatch_get_main_queue()) {...}

und

dispatch_sync (dispatch_get_main_queue()) mit {...}

Aber mit async erhielt ich das gleiche Ergebnis, das ich ohne es hatte, und mit der Synchronisierung mein Bildschirm friert ein.

Ich irgendwie damit verloren, ich bin mir sicher, dass meine Probleme sind, weil iOS nicht alle Benachrichtigungserstellung rechtzeitig verarbeitet, aber ich weiß nicht, wie Sie es beheben.

Ich hoffe jemand kann mir helfen, ich bin mit XCode 7.3.1 und Swift 2.2

+0

Sie sollten Xcode 8 Beta oder Xcode 7.3 ausprobieren, um zu sehen, ob das Problem weiterhin besteht. – haykam

Antwort

3

Aus der Dokumentation: https://developer.apple.com/library/ios/documentation/iPhone/Reference/UILocalNotification_Class/

Eine App nur eine begrenzte Anzahl von haben kann geplante Benachrichtigungen; das System hält die am schnellsten feuernden 64 Benachrichtigungen (mit automatisch verschobenen Benachrichtigungen, die als einzelne Benachrichtigung zählen) und verwirft den Rest.

+0

Das ist das Problem. Ich muss nach einem anderen Ansatz suchen. Vielen Dank. – Lucas