目标 C - 如何使用 NSUserNotification 标识符 属性

ObjectiveC - how to use NSUserNotification identifier property

根据苹果文档 https://developer.apple.com/reference/foundation/nsusernotification/1416410-identifier

NSUserNotification 有一个名为 属性 的标识符,当标识符与另一个通知相同时,它可以替换通知。

当我测试此功能时,似乎通知并没有真正被替换,只是没有发送。

如何实现通知中心只有一种通知,最新调用的更新到最前面的效果?

发送通知A+通知B+通知A,延迟1分钟

这是 mac 通知中心显示的内容

无标识符

NotificationA (now) 
NotificationB (1 minute ago) 
NotificationA (2 minute ago)

带标识符

NotificationB (1 minute ago) 
NotificationA (2 minute ago)

注意由于存在标识符而未调用通知 A(第二次)

想要的效果

NotificationA (now) 
NotificationB (1 minute ago)

此时Notification A再次发送,之前的Notification A消失了

您可以使用 NSNotificationCenters removeDeliveredNotification: 方法删除现有的 notification。 只需删除并重新添加您的通知。

Objective-C

[[NSUserNotificationCenter defaultUserNotificationCenter] removeDeliveredNotification:userNotification];
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification];  

Swift

NSUserNotificationCenter.default.removeDeliveredNotification(userNotification)
NSUserNotificationCenter.default.deliver(userNotification)

我成功地使用了这种技术来显示通知,而不会污染通知中心。