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
с использованием NSNotificationCenter
s removeDeliveredNotification:
метод. Просто удалите и повторно добавьте ваше уведомление.
Objective-C
[[NSUserNotificationCenter defaultUserNotificationCenter] removeDeliveredNotification:userNotification];
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification];
стриж
NSUserNotificationCenter.default.removeDeliveredNotification(userNotification)
NSUserNotificationCenter.default.deliver(userNotification)
Я успешно использовал эту технику, чтобы показывать уведомления, не загрязняя центр уведомлений.