OS X: MBS: NotificationCenter - RemoveScheduledNotification

Ich habe zum testen eine minütlich wiederholende Notification erstellt, welche ich jetzt nicht mehr los werde :slight_smile:

[code] dim n as new NSUserNotificationMBS
Dim d As New NSDateComponentsMBS

n.Title = App.LongVersion
n.subtitle = “Fällige Ablesung”
n.informativeText = “Strasse, Hausnummer”
n.deliveryDate = DeliverDate // <- Ist ein Date Objekt
n.hasActionButton = False

d.minute = 1
n.deliveryRepeatInterval = d

App.NSUNC_MBS.removeAllDeliveredNotifications
App.NSUNC_MBS.scheduleNotification n[/code]

Später habe ich versucht diese Notification mit denselben Parametern per NSUserNotificationCenterMBS.removeScheduledNotification zu löschen, aber sie erscheint immer wieder :confused:

hast du dir die Referenz auf die Notification gemerkt, so dass du die gleiche auch wieder entfernst?
Wenn du eine neue machst und die nur entfernst, bringt das nichts.

Nein. Leider habe ich den englischen Text im Manual so nicht verstanden.

Kann ich irgendwie ALLE Notifikationen zu meiner App löschen/resetten oder werde ich diese jetzt “nie” wieder los?

Würde z.B.:

Dim Referenzen As New NSUserNotificationMBS For Each Referenzen In NSUNC_MBS.scheduledNotifications NSUNC_MBS.removeScheduledNotification Referenzen Next
alle geplanten Notifikationen löschen?

Und wenn ich Reminder verwalten möchte, würde ich die Referenz zu jedem neuen Reminder z.B. in einer Datenbank speichern und dann erst den “alten” Reminder löschen und dann einen neuen erstellen?

Und wenn ja, wie komme ich an diese Referenz bitte? :slight_smile:

Hast du einfach mal neugestartet? Ich hatte sowas bei meinen Experimenten mit dem Notification Center auch geschafft. Einen Reboot hatte die Benachrichtigung dann aber nicht überlebt.

EDIT: Und Notifications “überschreiben” geht m.E., wenn man ihnen zur Creation Time einen eindeutigen Namen gibt und diesen dann für Modifikationen benutzt. Die ID, die das Notification Center selbst für eine Notification ausweist, ist eine andere als die der Notification, die du erstellst – jedenfalls hatte sich das für mich so dargestellt, lasse mich aber gerne belehren.

Na ja, die Funktionen scheduledNotifications und deliveredNotifications geben dir doch alle Notifications.
Dann eine Schleife drüber und removeDeliveredNotification bzw. removeScheduledNotification.

Dim Referenzen As New NSUserNotificationMBS For Each Referenzen In NSUNC_MBS.scheduledNotifications NSUNC_MBS.removeScheduledNotification Referenzen Next

Löscht ALLE Reminder der App.

Jetzt muss ich nur noch wissen wie ich an die Referenz komme so das ich Reminder aktualisieren/ändern kann. :wink:

im scheduledNotifications Array sind die doch drin, oder?

Also altes Objekt löschen, neues anlegen.
Du hast ja hoffentlich eine eigene DB um dir die Liste zu merken.

Davon gehe ich auch aus. Sonst wäre das ja alles ohne Sinn. :wink:

[quote=170332:@Christian Schmitz]Also altes Objekt löschen, neues anlegen.
Du hast ja hoffentlich eine eigene DB um dir die Liste zu merken.[/quote]

Jepp.

Ich stelle mir das so vor:
Wenn ich einen Reminder erstelle, sichere ich die entspr. Referenz in meiner DB.
Möchte ich einen Reminder löschen, spreche ich diesen über die Referenz an.
Soweit so gut.

Aber wie erhalte ich beim Erstellen eines Reminders die Referenz? Ich schaue mir das noch einmal an…

Nein.

Beim Erstellen einer Notifikation sehe ich aber eine Description in der steht dann z.B.:

<NSUserNotification:0x1b448b0> { title: "Meine App" informativeText: "Zuhause, Strom" actionButtonTitle: "(null)" next delivery date: 2015-02-25 09:00:00 +0000 }

Ist 0x1b448b0 dann die Referenz?

[quote=170299:@Christian Schmitz]hast du dir die Referenz auf die Notification gemerkt, so dass du die gleiche auch wieder entfernst?
Wenn du eine neue machst und die nur entfernst, bringt das nichts.[/quote]

Ich denke ich hab es endlich verstanden. Mit “Referenz auf die Notification” meinst Du einen von mir selbst und möglichst eindeutigen “identifier”, richtig?

Um also später eine bestimmte Notifikation zu ändern oder zu löschen, verwende ich z.B. folgenden Code?

[code] Dim myReminder As New NSUserNotificationMBS

myReminder = “Mein selbst definierter und eindeutiger Identifier”
App.NSUNC_MBS.removeScheduledNotification(Referenz)
[/code]

Scheint genau so zu funktionieren.

@Christian Schmitz : Ich würde meinen letzten Post gerne als Antwort markieren. Es sei denn Du hast noch Ergänzungen. :slight_smile:

Ohne Christian zu sein oder ihm ins Wort fallen zu wollen: Das war genau das, was ich hiermit meinte:

Das hatten meine Spielereien auch ergeben. Die name-property ist der Identifier einer Notification.

Also mit der Referenz mein ich die Variable, die das Objekt referenziert.

Aber eine NSUserNotificationMBS Objekt hat auch ein Identifier als Eigenschaft. Den kannst du dir merken und damit spter die Notification wieder in der Liste finden.

0x1b448b0 ist der pointer. Der ndert sich aber bei jedem Programmstart.

Versteht mich jetzt bitte nicht falsch. Ich bin sehr dankbar für alle Hinwiese in diesem Thread. Ich will nicht undankbar sein. Am Ende haben mir diese in Summe geholfen, eine Lösung zu finden! :slight_smile:

Das hilft einem NOOB (ist ja z.Zt. sehr IN das Wort hier…) wie mir nur bedingt. :wink:

Wir sprechen hier von “Referenzen” und “eindeutigen Namen” was für jemanden wie mich recht schwammig ist.
Um es Hobby-Programmierern wie mich einfacher zu machen, bleibe ich im aktuellen Beispiel lieber bei dem “identifier”. denn dieser ist als Eigenschaft des NSUserNotificationMBS Objekt vorhanden. So kann ich es zumindest leichter begreifen und umsetzen. :wink:

Also zusammengefasst, mache ich jetzt folgendes:

Ich lege eine Notifikation an mit:

[code]dim n as new NSUserNotificationMBS
Dim d As New NSDateComponentsMBS

n.Identifier =
n.Title = “Titel”
n.subtitle = “Untertitel”
n.informativeText = “Beschreibung”
n.deliveryDate = DeliverDate // <- Ist ein Date Objekt

d.minute = 1 // Wird dann minütlich wiederholt
n.deliveryRepeatInterval = d

App.NSUNC_MBS.scheduleNotification n[/code]

Später kann ich solch eine Notifikation dann so z.B. wieder löschen:

[code] dim n as new NSUserNotificationMBS

n.identifier = <Mein selbst definierter und eindeutiger Identifier als String>

App.NSUNC_MBS.removeScheduledNotification n[/code]

Danke an alle für die freundliche Hilfe :slight_smile:

Noch ein Nachsatz von mir: Ich kann deine Verwirrung gut verstehen, zumal ich auch die falsche Property benannt habe. Sorry! Wie von Christian schon gesagt (und von dir herausgefunden), heit das Ding in der Tat identifier.

Was durchaus verwirrend ist, denn die meisten Objekte werden ber ihr Handle adressiert gerne mal auch als Id vom Typ Ptr bezeichnet , und hier ist es das Entscheidende eine Textvariable, obwohl die Dinger durchaus auch ein Handle haben. Da hab ich Tage drber gebrtet!

Und falsch verstndlich fand ich gar nix von dir irgendwie fehlt doch immer wieder die riesiggroe Alleserklrbibliothek und man muss sich die Brckchen zusammensuchen. Kenn ich gut!

Schön, wenn es klappt.

und leider sind die ganzen Bezeichnungen alle sehr schwammig.

Die Variable n im Code bei dir hält eine Referenz auf ein NSUserNotificationMBS Objekt im Speicher. Dieses hat wieder eine Referenz in Form des identifiers zur Datenbank vom OS X, wo die dann unter dem Identifier abgespeichert ist. Der müsste auch vom System generiert werden, wenn du ihn nicht setzt.