为啥用户单击通知时不存在 userInfo?

Posted

技术标签:

【中文标题】为啥用户单击通知时不存在 userInfo?【英文标题】:Why is userInfo not present when user clicks notification?为什么用户单击通知时不存在 userInfo? 【发布时间】:2020-11-22 11:54:18 【问题描述】:

我使用以下功能来显示通知(该部分有效)。

func showNotification(_ body: String, _ config: Config)
  let content = UNMutableNotificationContent()
  content.body = body
  content.userInfo = ["logFile": config.logFile]
  let request = UNNotificationRequest(
    identifier: UUID().uuidString,
    content: content,
    trigger: nil
  )
  UNUserNotificationCenter.current().add(request)  (error:Error?) in
    if error != nil 
      print(error?.localizedDescription ?? "Could not add notification")
    
  

当应用未运行,用户点击通知中心的通知时,我使用以下函数尝试获取userInfo,但该属性不存在。

func applicationDidFinishLaunching(_ notification: Notification) 
  DispatchQueue.main.async 
    let alert = NSAlert.init()
    alert.messageText = String(describing: notification.userInfo)
    alert.runModal()
  

为什么?

【问题讨论】:

【参考方案1】:

找出原因!

我试图在applicationDidFinishLaunching 中获取userInfo,但获取userInfo 的正确方法是使用userNotificationCenter(无论应用程序是否正在运行)。

func userNotificationCenter(
  _ center: UNUserNotificationCenter,
  didReceive response: UNNotificationResponse,
  withCompletionHandler completionHandler: @escaping () -> Void
) 
  DispatchQueue.main.async 
    let alert = NSAlert.init()
    alert.messageText = String(describing: response.notification.request.content.userInfo)
    alert.runModal()
  

【讨论】:

以上是关于为啥用户单击通知时不存在 userInfo?的主要内容,如果未能解决你的问题,请参考以下文章

如何观察 RestKit 中是不是存在字段。值为 null 时不调用 Setter

单击通知时不执行任何操作

在 Java 中,调用 PostgreSQL 函数,为啥我收到一个错误,通知该函数不存在?

为啥 Grails 在域对象保存时不通知我错误?

为啥即使数据库中不存在 id 和/或用户名我也会成功

17..userinfo.txt 文件中存放以下结构: