ObjectiveC - как использовать свойство идентификатора NSUserNotification

Согласно документам Apple, 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 (2-й раз) не вызывается из-за присутствия идентификатора

Желаемый эффект

NotificationA (now) 
NotificationB (1 minute ago)

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

1 ответ

Решение

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

Objective-C

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

стриж

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

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

Другие вопросы по тегам