objective-c - Objective C - 如何使用 NSUserNotification 标识符属性

标签 objective-c cocoa notifications nsusernotification nsusernotificationcenter

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

NSUserNotification 有一个名为“标识符”的属性,当标识符与另一个通知相同时,该属性将替换通知。

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

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

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

这是 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)

在这种情况下,通知A再次发送,之前的通知A消失了

最佳答案

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

Objective-C

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

swift

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

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

关于objective-c - Objective C - 如何使用 NSUserNotification 标识符属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465355/

相关文章:

objective-c - 将选定的日期和时间保存到plist中

ios - 如果输入的值超过指定的整数,则清除 UITextField

ios - 等待一定时间后向用户发送通知

ios - ImageView 导致尴尬的挂起?

objective-c - 传入自定义选择器实现

ios - 在 xcode8 中找不到 ModuleName-Swift.h 文件

objective-c - 显示无窗口 (LSUIElement) 应用程序的首选项

iphone - 如何将范围列表映射到单个值?

xcode - 无法将( Storyboard) socket 从(NSApplication)连接到 Cocoa 和 Storyboard中的(NSNibExternalObjectPlaceholder)错误

ios - 如何为本地通知创建后台服务?