【问题标题】:How to retrieve realm object from different function? Swift如何从不同的函数中检索领域对象?迅速
【发布时间】:2017-08-02 18:39:34
【问题描述】:

我目前有一个将领域对象写入数据库并写入通知的函数。写入对象时,将其添加到 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()
}

我该怎么做呢?

【问题讨论】:

    标签: ios swift realm uilocalnotification realm-mobile-platform


    【解决方案1】:

    在设置通知时,您应该在通知请求中存储通知所涉及的对象的名称/主键。您可以在UNMutableNotificationContent.userInfo 中存储任何信息,并通过

    userNotificationCenter(_:didReceive:withCompletionHandler:) 中访问它

    let userInfo = response.notification.content.userInfo.

    然后您可以使用存储在userInfo 中的主键从Realm 检索对象。

    【讨论】:

      【解决方案2】:

      您想在用户通知触发后创建新元素或查找已存在的元素?如果要查找,可以从数据库中查询该元素,然后将其删除。您可以按日期或标识符查询(您可以使用用户默认值来实现它,通过将标识符字段添加到元素并在每次创建新元素时递增它)。 对于对象操作后的 UI 修改,您可以使用来自 Realm 的对象通知。你可以阅读它here

      【讨论】:

      • 但是由于每个任务都有不同的标题,我该如何检索正确的标题?假设我的任务名称是“买杂货”。在通知中它会说:“提醒:购买杂货”。然后,如果用户点击该标记作为完成操作,它必须从领域中删除该特定对象。
      • 就我而言,我使用标识符字段来确定标记了哪些元素。标识符是特定通知的唯一键。通过添加 UNNotificationAction 并检查用户点击的特定操作按钮,为此采取的行动(我的理解是,您希望用户在通知处点击一个按钮来标记此元素)。只需使用重写您的标识符并向通知添加操作,不要使用标题来检查元素。
      猜你喜欢
      • 2019-02-06
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多