我目前有一个将域对象写入数据库并写入通知的函数。写入对象时,会将其添加到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 :(得分:0)
您希望在用户通知触发后找到新元素或找到已存在的元素?如果要查找,可以从数据库中查询该元素,然后将其删除。您可以按日期或标识符进行查询(您可以使用“用户默认值”,通过向元素添加标识符字段来实现它,并在每次创建新元素时将其递增)。 对于对象操作后的UI修改,您可以使用Realm中的对象通知。你可以阅读它here。
答案 1 :(得分:0)
设置通知时,您应该在通知请求中存储通知所针对的对象的名称/主键。您可以在UNMutableNotificationContent.userInfo
中存储任何信息,并通过
userNotificationCenter(_:didReceive:withCompletionHandler:)
中访问该信息
let userInfo = response.notification.content.userInfo
。
然后,您可以使用Realm
中存储的主键从userInfo
检索对象。