2017-08-02 22 views
0

我現在有一個寫入境界對象到數據庫中,並寫入通知功能。當對象被寫入時,它會被添加到一個uicollectionview中並顯示出來。下面的函數添加對象並根據UIDatePicker設置通知。沒有顯示的代碼,因爲它是有很多不屬於問題:如何從不同的功能檢索領域對象?斯威夫特

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

let userInfo = response.notification.content.userInfo訪問它userNotificationCenter(_:didReceive:withCompletionHandler:)

然後,您可以從Realm中檢索對象,主鍵存儲在userInfo中。

0

您希望在用戶通知已經被炒到創建新元素或者發現已經存在的元素?如果你想查找,你可以從數據庫中查詢該元素並將其刪除。您可以按日期或標識符(使用用戶默認值,通過添加標識符字段元素,當你創建新的元素,你可以實現它,並增加它每次)查詢。 對於對象操作後的UI修改,您可以使用來自Realm的對象通知。你可以閱讀關於它here

+0

但由於每個任務都有不同的標題,我會如何獲取正確的?假設我的任務名稱是「購買雜貨」。在通知中會說:「提醒:買雜貨」。然後,如果用戶點擊標記爲完整動作,則必須從領域中刪除該特定對象。 – ayjoy

+0

至於我,我已經使用標識符字段來確定哪些元素被標記。標識符是特定通知的唯一鍵。而對於這個動作(我所理解的,你想要用戶在通知輕按一鍵,以紀念這個元素)加入UNNotificationAction和檢查什麼具體的操作按鈕的用戶點擊。只需使用重寫您的標識符並將其添加到通知中,請勿使用標題來檢查元素。 –