在其中一个 WWDC 会议中,我获得了用于更新现有通知的代码片段。我不认为它有效。正在尝试更新通知内容。
首先,我请求UNUserNotificationCenter
始终有效的待处理通知。然后我正在创建新请求以使用现有的唯一标识符更新通知。
有 1 个新变量content: String
。
// Got at least one pending notification.
let triggerCopy = request!.trigger as! UNTimeIntervalNotificationTrigger
let interval = triggerCopy.timeInterval
let newTrigger = UNTimeIntervalNotificationTrigger(timeInterval: interval, repeats: true)
// Update notificaion conent.
let notificationContent = UNMutableNotificationContent()
notificationContent.title = NSString.localizedUserNotificationString(forKey: "Existing Title", arguments: nil)
notificationContent.body = content
let updateRequest = UNNotificationRequest(identifier: request!.identifier, content: notificationContent, trigger: newTrigger)
UNUserNotificationCenter.current().add(updateRequest, withCompletionHandler: { (error) in
if error != nil {
print(" Couldn't update notification \(error!.localizedDescription)")
}
})
我无法捕捉到错误。问题是通知内容主体 没有改变。
更新。
我还尝试使用不同的重复间隔更改触发器。它不起作用,通知以创建时的相同原始间隔重复。
更新 2。
阅读克里斯的回答,尝试选择第一个选项。
let center = UNUserNotificationCenter.current()
center.getPendingNotificationRequests(completionHandler: { (requests) in
for request in requests {
if request.identifier == notificationIdentifier {
// Got at least one pending notification,
// update its content.
let notificationContent = UNMutableNotificationContent()
notificationContent.title = NSString.localizedUserNotificationString(forKey: "new title", arguments: nil)
notificationContent.body = "new body"
request.content = notificationContent // ⛔️ request.content is read only.
}
}
})
如您所见,我无法修改原始请求。
更新 3。
已经选择了第二个“首先删除”选项。注意到removePendingNotificationRequests
之后的呼叫和安排,仍然给我旧的通知版本。我不得不在调用removePendingNotificationRequests
和之间添加 1 秒延迟center.add(request)
。
将克里斯的回答标记为已接受,但请随时分享更好的选择。