2016-04-15 8 views
0

Ich muss bereits angezeigte lokale Benachrichtigung von Notification Center programmatisch löschen. Nach this link implementierte ich vorgeschlagene Lösung, aber das Problem ist, dass eventArray von diesem Beispiel immer 0 Elemente hat. Wenn ich nach unten wische, um die Benachrichtigungszentrale anzuzeigen, sehe ich 4 Benachrichtigungen, die ich zuvor erstellt habe. Also in diesem Fall erwarte ich, dass dieses Array 4 Elemente hat, aber es hat 0. Irgendeine Idee, warum ist das so? Ich habe versucht, auf iOS 8.3 und 9.2.1 und Array ist 0 auf beiden von ihnen.Löschen bereits angezeigte lokale Benachrichtigung programmatisch

iOS hat 2 Möglichkeiten präsentieren lokale Benachrichtigungen:

  1. Von Notification Center:
    • Sie können Benachrichtigung nicht wegwischen von links nach rechts.
    • Sie können Benachrichtigungen von rechts nach links wischen (Löschen einzelner Benachrichtigungen aus der Liste).
    • Sie können auf die Benachrichtigung klicken, woraufhin die App starten und Benachrichtigung wird von Notification Center (gehandhabt von iOS-System)
  2. Von Lock-Bildschirm entfernt werden:
    • Nur verfügbar, wenn Sie ermöglichen Diese Einstellung aus den iPhone/iPad-Einstellungen: http://www.imore.com/how-disable-notification-center-lock-screen-your-iphone-and-ipad
    • Sie können Benachrichtigungen von links nach rechts streichen (Ihre App wird gestartet und von iOS verarbeitet). In diesem Fall wird die Benachrichtigung aus der Benachrichtigungszentrale nicht gelöscht (iOS löscht sie nicht und erlaubt nicht das Löschen einer einzelnen Benachrichtigung aus dem Code, nachdem die Benachrichtigung dem Benutzer bereits in der Benachrichtigungszentrale angezeigt wurde).
    • Sie können die Benachrichtigung von rechts nach links streichen (Löschen einzelner Benachrichtigungen aus der Liste, die von iOS verarbeitet werden. Benachrichtigungen in der Benachrichtigungszentrale werden ebenfalls gelöscht und von iOS verarbeitet).
    • Sie können nicht auf die Benachrichtigung klicken.

EDIT: Hier ist Beispielcode, wie ich es tat:

UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
localNotification.alertBody = @"1"; 
localNotification.alertTitle = @"1"; 
localNotification.userInfo = uniqueDictIdentifier1; 
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; 

UILocalNotification *localNotification2 = [[UILocalNotification alloc] init]; 
localNotification2.alertBody = @"2"; 
localNotification2.alertTitle = @"2"; 
localNotification2.userInfo = uniqueDictIdentifier2; 
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification2]; 

.... 
//2 more notifications are created like this 

Und dann gibt es Code alle Benachrichtigungen zur Filterung:

NSArray *eventArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; 
for (int i=0; i<[eventArray count]; i++) { 
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; 
    NSDictionary *userInfoCurrent = oneEvent.userInfo; 
    if ([userInfoCurrent isEqualToDictionary:uniqueDictIdentifier1]) { 
     [[UIApplication sharedApplication] cancelLocalNotification:oneEvent]; 
     break; 
    } 
} 

Antwort

0

Für eine Benachrichtigung für das Speichern eine eindeutige ID

NSDictionary * infoDict = @{ @"alarmUiqueId" : uID, 

            }; 
    NSLog(@"%@",infoDict); 
    NSDateComponents *comp = [[NSCalendar currentCalendar] components:NSCalendarUnitSecond 
                  fromDate:fireDate]; 
    fireDate = [fireDate dateByAddingTimeInterval:-comp.second]; 
    UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
    localNotif.fireDate = fireDate; 
    localNotif.timeZone = [NSTimeZone localTimeZone]; 
    localNotif.alertBody = desString; 
    localNotif.userInfo = infoDict; 
    localNotif.repeatInterval = NSCalendarUnitDay; 
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif] 

und zum Löschen einer bestimmten Benachrichtigung diesen Code schreiben.

NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; 

    for(UILocalNotification *notification in notificationArray) 
    { 
     NSLog(@"%@",[notification.userInfo valueForKey:@"alarmUiqueId"]); 
     if ([[notification.userInfo valueForKey:@"alarmUiqueId"] isEqualToNumber: health.uniqueId]) 
     { 
      [[UIApplication sharedApplication] cancelLocalNotification:notification] ; 
     } 
    } 
+0

Ich habe meine Frage bearbeitet, um weiter zu erklären, was das Problem ist. Fett geschriebener Text erklärt, in welcher Situation ich eine einzelne Benachrichtigung löschen muss. Das verknüpfte Stackoverflow-Problem enthält den Code zum Entfernen einer einzelnen Benachrichtigung. –

+0

möchten Sie eine bestimmte Benachrichtigung löschen? –

+0

Ja, ich möchte eine einzelne Benachrichtigung löschen, die bereits in der Benachrichtigungszentrale angezeigt wird. Ich habe gerade die Google Mail App heruntergeladen und bestätigt, dass sie das gleiche Problem wie meine App hat. Also ich denke, das ist mehr eine iOS-Einschränkung, als ein Fehler in meiner App. –

0

Mein Verständnis ist unten: Sie nicht die Informationen von bereits angemeldeten LocalNotification mit scheduledNotifications bekommen kann.

Meine Lösung ist, halten Sie einfach UILocalNotification-Instanz in Ihrem Singleton-Objekt in Ihrer Anwendung, und rufen Sie cancelLocalNotification mit der Instanz, wenn Sie aus Notification Center löschen möchten.

Kann dies Ihre Hilfe sein?

Verwandte Themen