0

Ich habe derzeit eine Funktion, die ein Realm-Objekt in die Datenbank schreibt und eine Benachrichtigung schreibt. Wenn das Objekt geschrieben wird, wird es einer uicollection-Ansicht hinzugefügt und angezeigt. Die folgende Funktion fügt das Objekt hinzu und legt eine Benachrichtigung basierend auf einem UIDatePicker fest. Dieser Code ist nicht dargestellt, da es eine Menge ist, die nicht auf das Problem nicht betreffen:Wie Realm-Objekt aus verschiedenen Funktionen abrufen? Swift

func createTaskWithDate() { 
    let task = Task() 
task.name = textField.text! 
//notification code under here 
try! realm.write { 
realm.add(task) 
updateData() 
    } 

Ich habe auch eine andere Funktion, die zu einer Meldung Satz auf eine Aktion reagiert. Wenn der Benutzer auf die Benachrichtigung tippt, erhält er die Option "als abgeschlossen markieren". Wenn der Benutzer auf "Als abgeschlossen markieren" klickt, versuche ich, das Objekt aus der "createTaskWithDate()" -Methode abzurufen und es aus der Sammlungsansicht zu löschen, aber ich bin nicht sicher, wie dieses Objekt von dieser Methode abgerufen werden kann:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
    let identifier = response.actionIdentifier 
    let request = response.notification.request 
    if identifier == "complete" { 
     try! realm.write { 
      //realm.delete(task object from createTaskWithDate()) 
     updateData() 

     } 
    } 
    completionHandler() 
} 

Wie könnte ich das tun?

Antwort

0

Wenn Sie die Benachrichtigung einrichten, sollten Sie den Namen/Primärschlüssel des Objekts, über das sich die Benachrichtigung in Ihrer Benachrichtigungsanforderung befindet, speichern. Sie können alle Informationen in UNMutableNotificationContent.userInfo speichern und in userNotificationCenter(_:didReceive:withCompletionHandler:) von

let userInfo = response.notification.content.userInfo zugreifen.

Dann können Sie das Objekt von mit dem Primärschlüssel in userInfo gespeichert abrufen.

0

Sie möchten ein neues Element erstellen, wenn Ihre Benutzerbenachrichtigung ausgelöst wurde oder ein bereits vorhandenes Element gefunden wurde? Wenn Sie suchen möchten, können Sie dieses Element aus der Datenbank abfragen und löschen. Sie können nach Datum oder Bezeichner suchen (Sie können es mithilfe der Benutzervorgaben implementieren, indem Sie dem Element ein Bezeichnerfeld hinzufügen und jedes Mal, wenn Sie ein neues Element erstellen, die Bezeichnerzahl erhöhen). Für die Änderung der Benutzeroberfläche nach der Objektmanipulation können Sie Objektbenachrichtigungen aus dem Bereich "Realm" verwenden. Sie können darüber lesen here.

+0

Aber da jede Aufgabe einen anderen Titel hat, wie würde ich die richtige abrufen? Sagen wir, mein Name ist "Lebensmittel einkaufen". In der Benachrichtigung wird es sagen: "Erinnerung: kaufen Lebensmittel". Wenn der Benutzer dann die Markierung als vollständige Aktion antippt, muss er dieses bestimmte Objekt aus dem Bereich löschen. – ayjoy

+0

Für mich habe ich Identifier-Feld verwendet, um festzustellen, welches Element markiert wurde. Der Bezeichner ist ein eindeutiger Schlüssel für bestimmte Benachrichtigungen. Und action für diese (wie ich verstehe, Sie möchten Benutzer auf eine Schaltfläche bei der Benachrichtigung tippen, um dieses Element zu markieren) durch Hinzufügen von UNNotificationAction und überprüfen Sie, welche bestimmte Aktion Schaltfläche Benutzer tippen. Schreiben Sie Ihren Bezeichner einfach um und fügen Sie Ihrer Benachrichtigung eine Aktion hinzu. Verwenden Sie keinen Titel zum Überprüfen der Elemente. –

Verwandte Themen