0

私は現在、レルムオブジェクトをデータベースに書き込み、通知を書き込む関数を持っています。オブジェクトが書き込まれると、オブジェクトはユークリッドビューに追加されて表示されます。以下の関数は、オブジェクトを追加し、UIDatePickerに基づいて通知を設定します。異なる機能から領域オブジェクトを取り出す方法は? Swift

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

私も通知セット上のアクションに反応する別の機能を持っている:それは問題に関係していないがたくさんあるので、このコードは表示されません。ユーザーが通知をタップすると、「完了としてマークする」というオプションが与えられます。ユーザーが「完了としてマーク」をタップすると、「createTaskWithDate()」メソッドからオブジェクトを取得してコレクションビューから削除しようとしていますが、そのメソッドからそのオブジェクトを取得する方法がわかりません:

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() 
} 

これを行うにはどうすればいいですか?

答えて

0

通知を設定するときは、通知が通知要求に含まれているオブジェクトの名前/主キーを保存する必要があります。任意の情報をUNMutableNotificationContent.userInfoに保存し、userNotificationCenter(_:didReceive:withCompletionHandler:)

let userInfo = response.notification.content.userInfoでアクセスできます。

次に、userInfoに格納された主キーを使用してRealmからオブジェクトを取得できます。

0

ユーザー通知が送信されたとき、または既に存在する要素を見つけたときに新しい要素を作成したいですか?見つけたい場合、その要素をデータベースから照会し、削除することができます。日付または識別子で照会することができます(ユーザーのデフォルトを使用して、要素に識別子フィールドを追加し、新しい要素を作成するたびにその値を増やすことで実装できます)。 オブジェクトの操作後にUIを変更する場合、Realmのオブジェクト通知を使用できます。あなたはそれについてhereを読むことができます。

+0

しかし、すべてのタスクが異なるタイトルを持っているので、どのように正しいものを取得できますか?私の仕事の名前が「食料品を買う」としましょう。通知では、「リマインダー:食料品を購入する」と表示されます。次に、ユーザーがマークを完全なアクションとしてタップすると、その特定のオブジェクトをレルムから削除する必要があります。 – ayjoy

+0

私にとって、私は識別子フィールドを使用して、どの要素がマークされているかを判断しました。識別子は、特定の通知に対する一意のキーです。 UNNotificationActionを追加して、ユーザーがタップする具体的なアクションボタンを確認することで、このアクション(この要素をマークするために、通知時にユーザーがボタンをタップするようにしたいと思っています)。あなたの通知にあなたの識別子を書き換えてアクションを追加するだけで、要素をチェックするためのタイトルを使わないでください。 –

関連する問題