1

Согласно яблоневым документам https://developer.apple.com/reference/foundation/nsusernotification/1416410-identifierObjectiveC - как использовать NSUserNotification идентификатор свойство

NSUserNotification имеет свойство с именем идентификатора, который предполагает, чтобы заменить уведомления, когда идентификатор совпадает с другим уведомления.

Когда я тестировал эту функцию, однако кажется, что уведомление на самом деле не заменено, просто не отправлено.

Как я могу добиться эффекта, когда в центре уведомлений присутствует только один вид уведомления, но последний из них обновляется до вершины?

Отправка уведомления A + уведомление B + уведомление А с 1 минутной задержкой

Это то, что в настоящее время показано на уведомления макинтоша центра

Без идентификатора

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

С идентификатором

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

Обратите внимание, как Уведомление А (2-й раз) не вызывается из-за идентификатором присутствует

Желательный эффект

NotificationA (now) 
NotificationB (1 minute ago) 

В этой ситуации Уведомление A отправляется снова, и предыдущее уведомление A не прошло

+1

Мы столкнулись с аналогичной проблемой в Chrome, и мы закончили удаление уведомления и повторное добавление его снова. Код по-прежнему не включен по умолчанию, но вы можете попробовать его, переключив некоторые флаги. Рад предоставить дополнительную информацию, если это поможет. https://cs.chromium.org/chromium/src/chrome/browser/notifications/notification_platform_bridge_mac.mm?rcl=0&l=142 –

+0

Что делает, спасибо – David

ответ

2

Вы можете удалить существующий notification, используя метод NSNotificationCenter s removeDeliveredNotification:. Просто удалите и повторно добавьте свое уведомление.

Objective-C

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

Swift

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

Я успешно использовал эту технику, чтобы показать уведомления, не загрязняя центр уведомлений.

+0

Я только что видел комментарий Мигеля, я думаю, он был первым .. – mangerlahn

+0

Этот ответ более всеобъемлющий, так что все хорошо :) –

+1

Спасибо за ответ, но порядок должен быть отменен: сначала удалите предыдущее уведомление, а затем доставьте новое. – Alek