NSUserNotificationCenter解雇通知(NSUserNotificationCen

2019-06-27 08:39发布

我试图使用新的山狮NSUserNotificationCenter我的应用程序(这是不是太硬实际)。 发布通知的工作原理是通过一个魅力

NSUserNotification *userNotification = [[NSUserNotification alloc] init];
userNotification.title = @"Some title";
userNotification.informativeText = @"Some text";

[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification];

然而,我要取消那些在屏幕上,一旦应用程序获得焦点的所有通知。 例如,喜欢新的消息应用程序做的。 时在后台接收新的消息,通知被示出。 当应用程序再次变得活跃,这些都是自动解散,从屏幕,并从通知中心消失。

为了复制这一点,我已经注册到一个方法NSApplicationDidBecomeActiveNotification通知也被成功地调用。 在那里,我叫[NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications]

然而,这有而显示在右上角对应的“泡沫”仍显示的已收集在通知中心通知删除的效果。

遍历所有发送的通知,并删除它们各自对自己有完全相同的效果,因为已经使用scheduleNotification代替deliverNotification

我是唯一一个经历了这一点,还是我失去了一些东西解雇屏幕上的部分和编程的通知的通知中心的一部分?

Answer 1:

消息应用程序可能是使用私有NSUserNotificationCenter _removeAllDisplayedNotifications_removeDisplayedNotification:方法。

您可以尝试使用这些方法来测试,如果这是你在找什么。 只需添加这一类接口声明的方法:

@interface NSUserNotificationCenter (Private)
- (void)_removeAllDisplayedNotifications;
- (void)_removeDisplayedNotification:(NSUserNotification *)notification;
@end

不幸的是,因为这些无证方法,你可以不通过App Store分发的应用程序中使用它们。 如果这确实是你在找什么,那么你应该提交一个bug ,并要求这些方法成为公共API的一部分。



Answer 2:

由于10.9,下面的方法删除任何显示的通知:

// Clear a delivered notification from the notification center. If the 
// notification is not in the delivered list, nothing happens.
- (void)removeDeliveredNotification:(NSUserNotification *)notification;

// Clear all delivered notifications for this application from the 
// notification center.
- (void)removeAllDeliveredNotifications;

该行为似乎因为10.8有所改变,因为任何显示的通知也会被删除时,这些方法称为(感谢@ 0xced澄清)。



Answer 3:

removeDeliveredNotification被去除对我所显示的通知(在10.11),所述警告是所述identifier的通知必须被设置。



文章来源: NSUserNotificationCenter dismiss notification