2016-06-19 2 views
0

Gibt es eine schnelle und effiziente Möglichkeit, geplante Benachrichtigungen zu finden? Find list of Local Notification the app has already set bespricht durch die Liste gehen, das ist, was ich getan habe:Schnelle Suche nach geplanten Benachrichtigungen

 // To avoid duplicate notifications, check whether there are already scehduled notifications with the same fireDate, reminderName and calendar name. 
     if let definiteDueDateComponents = reminder.dueDateComponents, definiteDueDate = definiteDueDateComponents.date, definiteScheduledNotifications = UIApplication.sharedApplication().scheduledLocalNotifications { 

      for notification in definiteScheduledNotifications { 
       if notification.fireDate?.compare(definiteDueDate) == .OrderedSame { 
        // Check whether there is already a notification set up for definiteDueDate? 
        // If so, check whether the notification is actually for the same item that I want to set up here. 

       } 
      }     
     } 

Dies ist jedoch ineffizient, vor allem wenn ich viele Elemente, die ich gegen überprüfen möchten (den obigen Code ausgeführt wird), bevor ich sie planen und auch wenn ich bereits verschiedene geplante Benachrichtigungen habe.

Hat jemand experimentiert mit dem Erstellen eines Wörterbuchs (Hash-Tabelle) von geplanten Benachrichtigungen? Wenn ja, wann erstellen Sie es und erstellen es neu? Ist es mühsam, die Hash-Tabelle synchron mit UIApplication.sharedApplication().scheduledLocalNotifications zu halten?

Antwort

-1

Auch wenn Sie über 10000 geplante Benachrichtigungen verfügen, können Sie wahrscheinlich nicht feststellen, wie viel Zeit sie benötigen, um sie mit Ihren Augen zu durchlaufen. Sie müssten die Zeit davor und danach protokollieren und den Unterschied berechnen, und es wäre wahrscheinlich weniger als 1/1000 Sekunde.

Dies ist ein Fall von "vorzeitige Optimierung". Verwenden Sie eine for-Schleife und machen Sie damit fertig.

Wenn Sie mehr als 10.000 geplante Benachrichtigungen haben, müssen Sie Ihr Design überdenken.

+0

Es geht nicht nur um die Anzahl der geplanten Benachrichtigungen. Der Punkt, den ich oben gemacht habe, ist, dass ich die Überprüfung n mal durchführen muss, während ich m geplante Benachrichtigungen habe, daher wird die Laufzeit O (n * m) sein. Außerdem, warum denkst du ist es so schnell? Ich führe einen anderen Typ von I/O aus: Ich hole 1000 EKReminders aus dem EKEventStore in meinem Code und es dauert ungefähr 10 Sekunden! Definitiv auffällig. – Daniel

+0

Das ist anders. Die Liste der geplanten Benachrichtigungen ist ein In-Memory-Array. Das Iterieren wird sehr schnell sein. Sie müssen jedoch einen Weg finden, O (n * m) zu vermeiden. –