Sie können einen eindeutigen Wert für den Schlüssel in der Benutzerinfo Ihrer lokalen Benachrichtigung speichern. Holen Sie sich alle lokalen Benachrichtigungen, durchlaufen Sie das Array und löschen Sie die jeweilige Benachrichtigung.
Code wie folgt:
OBJ-C:
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;
}
}
SCHNELL:
var app:UIApplication = UIApplication.sharedApplication()
for oneEvent in app.scheduledLocalNotifications {
var notification = oneEvent as UILocalNotification
let userInfoCurrent = notification.userInfo! as [String:AnyObject]
let uid = userInfoCurrent["uid"]! as String
if uid == uidtodelete {
//Cancelling local notification
app.cancelLocalNotification(notification)
break;
}
}
UserNotification:
Wenn Sie UserNotification (iOS 10+) verwenden, führen Sie einfach die folgenden Schritte aus:
Fügen Sie beim Erstellen des UserNotification-Inhalts eine eindeutige Kennung hinzu
Entfernen Sie bestimmte ausstehende Benachrichtigungen mit removePendingNotificationRequests (withIdentifiers :)
Entfernen Sie bestimmte gelieferte Benachrichtigungen mit removeDeliveredNotifications (withIdentifiers :)
Weitere Informationen finden Sie im UNUserNotificationCenter
NSDictionary
ID " verwenden und diesen in einem mit dem Wert der ID der Entität speichern, die sich auf die beziehtUILocalNotification
. Setzen Sie dann die Eigenschaft notification.userInfo auf das Wörterbuch mit Ihren benutzerdefinierten Daten. Wenn Sie die Benachrichtigungen erhalten, können Sie sie mit dieser benutzerdefinierten ID oder anderen Elementen unterscheiden, die Sie benötigen.Andere Option:
Wenn Sie eine lokale Benachrichtigung erstellen, können Sie diese zunächst für die zukünftige Verwendung in den Benutzerstandards speichern. Das lokale Benachrichtigungsobjekt kann nicht direkt in den Benutzerstandards gespeichert werden. Dieses Objekt muss zuerst in ein NSData-Objekt konvertiert und dann
NSData
in gespeichert werdenUser defaults
. Unten ist der Code dafür:Nachdem Sie die lokale Benachrichtigung gespeichert und geplant haben, kann es in Zukunft erforderlich sein, dass Sie eine zuvor erstellte Benachrichtigung abbrechen müssen, damit Sie sie aus den Benutzerstandards abrufen können.
Hoffe das hilft
quelle
Hier ist was ich tue.
Gehen Sie beim Erstellen Ihrer Benachrichtigung folgendermaßen vor:
Wenn Sie versuchen, es zu löschen, gehen Sie wie folgt vor:
Diese Lösung sollte für mehrere Benachrichtigungen funktionieren und Sie sollten keine Arrays oder Wörterbücher oder Benutzerstandards verwalten. Sie verwenden einfach die Daten, die Sie bereits in der Systembenachrichtigungsdatenbank gespeichert haben.
Ich hoffe, dies hilft zukünftigen Designern und Entwicklern.
Viel Spaß beim Codieren! : D.
quelle
alertBody
oder nicht,fireDate
um eine Benachrichtigung zu identifizieren. Verwenden Sie dazu dasuserInfo
Feld als Antwort von @KingOfBliss Details ...Planen und EntfernenBenachrichtigung in Kürze:
quelle
alertBody
oder nicht,fireDate
um eine Benachrichtigung zu identifizieren. Verwenden Sie dazu dasuserInfo
Feld als Antwort von @KingOfBliss Details ...Die Lösung von iMOBDEV funktioniert perfekt, um eine bestimmte Benachrichtigung zu entfernen (z. B. nach dem Löschen des Alarms). Sie ist jedoch besonders nützlich, wenn Sie eine Benachrichtigung entfernen müssen, die bereits ausgelöst wurde und sich noch im Benachrichtigungscenter befindet.
Ein mögliches Szenario wäre: Die Benachrichtigung für einen Alarm wird ausgelöst, aber der Benutzer öffnet die App, ohne auf diese Benachrichtigung zu tippen, und plant diesen Alarm erneut. Wenn Sie sicherstellen möchten, dass nur eine Benachrichtigung für ein bestimmtes Element / einen bestimmten Alarm im Benachrichtigungscenter vorhanden ist, ist dies ein guter Ansatz. Außerdem müssen Sie nicht jedes Mal, wenn die App geöffnet wird, alle Benachrichtigungen löschen, damit diese besser zur App passen.
NSKeyedArchiver
Speichern SieData
beim Erstellen einer lokalen Benachrichtigung diese wie inUserDefaults
. Sie können einen Schlüssel erstellen, der dem entspricht, was Sie im userInfo-Wörterbuch der Benachrichtigung speichern. Wenn es einem Core Data-Objekt zugeordnet ist, können Sie dessen eindeutige objectID-Eigenschaft verwenden.NSKeyedUnarchiver
. Jetzt können Sie es mit der Methode cancelLocalNotification löschen.UserDefaults
entsprechend.Hier ist eine Swift 3.1-Version dieser Lösung (für Ziele unter iOS 10):
Geschäft
Abrufen und löschen
quelle
Schnelle Version, falls erforderlich:
quelle
Swift 4-Lösung:
quelle
Sie können eine Zeichenfolge mit der Kategorie-ID beibehalten, wenn Sie die Benachrichtigung wie folgt planen
und suchen Sie danach und brechen Sie bei Bedarf ab
quelle
Das UILocalNotification-Objekt, an das Sie übergeben,
cancelLocalNotification:
stimmt mit jedem vorhandenen UILocalNotification-Objekt mit übereinstimmenden Eigenschaften überein.So:
zeigt eine lokale Benachrichtigung an, die später storniert werden kann mit:
quelle
Ich benutze diese Funktion in Swift 2.0:
Inspiriert von @ KingofBliss 'Antwort
quelle
schnelle 3-Stil:
}}
für iOS 10 verwenden:
quelle
Für wiederholte Erinnerungen (Zum Beispiel möchten Sie, dass Ihr Alarm um 16, Sa und Mi um 16 Uhr ausgelöst wird. Dann müssen Sie 3 Alarme auslösen und repeatInterval auf NSWeekCalendarUnit setzen).
Für die einmalige Erinnerung:
Für wiederholte Erinnerungen:
Zum Filtern wird das Array angezeigt.
So entfernen Sie die Erinnerung, auch wenn sie nur einmal oder wiederholt wurde:
quelle
Ich habe die Antwort von KingofBliss ein wenig erweitert, diese etwas Swift2-ähnlicher geschrieben, unnötigen Code entfernt und einige Crash Guards hinzugefügt.
Um zu beginnen, müssen Sie beim Erstellen der Benachrichtigung sicherstellen, dass Sie die UID (oder eine benutzerdefinierte Eigenschaft) der Benachrichtigung festlegen
userInfo
:Wenn Sie es dann löschen, können Sie Folgendes tun:
quelle