2012-10-25 5 views
6

Ich habe ein Problem mit einem Aspekte LocalNotifications die Verwaltung - einzelne Benachrichtigung in iOS 6.Löschen LocalNotifications von NotificationCenter (iOS 6)

enter image description here

Ich bin in der Lage einen LocalNotification mit Textinhalt und Feuer erstellen Löschen Datum und es funktioniert.

Auf iOS 5 erfolgt die Benachrichtigung als AlertView auf dem Startbildschirm mit zwei Schaltflächen und wird nach dem Berühren entweder ausgeblendet. Ich kann das Feuer der Benachrichtigung mit [[UIApplication sharedApplication] cancelLocalNotification:theNotification] abbrechen. Hier gibt es kein Problem.

In iOS 6 erfolgt die Benachrichtigung in einer Notification Center wie oben gezeigt, wenn gefeuert wird. Wenn ich es unter Verwendung [[UIApplication sharedApplication] cancelLocalNotification:theNotification] annulliere, wird es nicht feuern - es funktioniert. Aber nachdem es feuert ...

Mein Problem:

Ich bin nicht in der Lage diese einzelne löschen gefeuert Benachrichtigung von dem Notification Center. Zum Beispiel möchte ich, dass die Benachrichtigung verschwindet, nachdem sie berührt wurde oder nachdem eine Aktion in der Anwendung ausgeführt wurde.

Was ich versucht:

  • [[UIApplication sharedApplication] cancelLocalNotification:theNotification] mit - annulliert Benachrichtigung Feuer (eigentlich gibt es keine Notwendigkeit, da die Benachrichtigung Feuer bereits getan haben), aber nicht gelöscht Benachrichtigung von Notification Center gefeuert
  • Entfernen von Elementen aus [[UIApplication sharedApplication] scheduledLocalNotifications] Array - funktioniert nicht, weil diese Funktion immer leere Array zurückgibt, egal wie viele (arbeiten!) Benachrichtigungen eingestellt sind (weiß jemand warum?)

Was ich jetzt

tun ich das Löschen aller Meldungen mit [[UIApplication sharedApplication] cancelAllLocalNotifications] - es löscht sie und löscht aus Notification Center, und erstellen Sie sie zurück, ohne das, was ich löschen wollte.

Wie Sie sehen können, ist dies eher idiotische und redundante Lösung, aber ich konnte bisher nicht besser finden.

Irgendwelche Vorschläge?

+0

Dank @deleteme. Ich nehme mir Zeit, um mit diesem Problem umzugehen. Lesen Sie Ihre Frage und stellen Sie fest, warum ich ein leeres Array bekomme, wenn ich '[[UIApplication sharedApplication] planedLocalNotifications] anrufe' '. Ich schätze, ich werde Ihre Lösung für den Moment verwenden. – IgniteCoders

Antwort

1

Versuchen Sie dies ..... Kann diese Hilfe sein ... Schreiben Sie diesen Code von wo Sie alle Ihre Benachrichtigungen löschen möchten.

   [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

Um eine einzige Meldung

löschen Sie können aus einer Reihe von geplanten Benachrichtigung erhalten: @property(nonatomic,copy) NSArray *scheduledLocalNotifications

das ein Erhalten Sie durch die Indexnummer Ihrer Wahl wollen und dann die UILocalNotification * passieren zu - (void)cancelLocalNotification:(UILocalNotification *)notification.

Sie können einen eindeutigen Wert für den Schlüssel in der Benutzerinfo Ihrer lokalen Benachrichtigung speichern. Erhalten Sie alle lokalen Benachrichtigungen, durchlaufen Sie das Array und löschen Sie die jeweilige Benachrichtigung.

-Code wie folgt,

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *eventArray = [app scheduledLocalNotifications]; 
for (int i=0; i<[eventArray count]; i++) 
{ 
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; 
    NSDictionary *userInfoCurrent = oneEvent.userInfo; 
    NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]]; 
    if ([uid isEqualToString:uidtodelete]) 
    { 
     //Cancelling local notification 
     [app cancelLocalNotification:oneEvent]; 
     break; 
    } 
} 
+0

Ich weiß, wie man alle Benachrichtigungen löscht (ich bin sicher, dass ich darauf hingewiesen habe). Mein Ziel ist es, eine einzige spezifische Benachrichtigung zu löschen. – deleteme

+0

Überprüfen, dass ich meine Antwort aktualisiere ... um eine einzige Benachrichtigung zu löschen. – Wolverine

+0

i Aktualisieren Sie auch Sample-Quellcode in meiner Antwort ..... vielleicht hilft es ... – Wolverine