Отправить уведомление в Центр уведомлений Mountain lion


может ли кто-нибудь привести пример отправки тестового уведомления из приложения Cocoa в Центр уведомлений? например. когда я нажимаю на NSButton

1 55

1 ответ:

уведомления в Mountain Lion обрабатываются двумя классами. NSUserNotification и NSUserNotificationCenter. NSUserNotification это ваше фактическое уведомление, оно имеет название, сообщение и т. д. это можно установить с помощью свойств. Чтобы доставить уведомление, которое вы создали, вы можете использовать deliverNotification: метод доступен в NSUserNotificationCenter. В документах Apple есть подробная информация о NSUserNotification & NSUserNotificationCenter но основной код для отправки уведомления выглядит так это:

- (IBAction)showNotification:(id)sender{
    NSUserNotification *notification = [[NSUserNotification alloc] init];
    notification.title = @"Hello, World!";
    notification.informativeText = @"A notification";
    notification.soundName = NSUserNotificationDefaultSoundName;

    [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
}

это создаст уведомление с заголовком, сообщением и будет воспроизводить звук по умолчанию, когда он отображается. Существует гораздо больше, что вы можете сделать с уведомлениями, чем просто это (например, планирование уведомлений), и все это подробно описано в документации, с которой я связан.

один маленький пункт, Уведомления будут отображаться только тогда, когда ваше приложение является ключевым приложением. Если вы хотите, чтобы ваши уведомления отображались независимо от того, если ваш приложение является ключевым или нет, вам нужно будет указать делегат для NSUserNotificationCenter и переопределить метод делегата userNotificationCenter:shouldPresentNotification: так что он возвращает да. Документация для NSUserNotificationCenterDelegate можно найти здесь

вот пример предоставления делегата в NSUserNotificationCenter, а затем принудительного отображения уведомлений независимо от того, является ли ваше приложение ключевым. В AppDelegate вашего приложения.m файл, отредактируйте его следующим образом:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
}

- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{
    return YES;
}

и в AppDelegate.ч, объявите, что класс соответствует протоколу NSUserNotificationCenterDelegate:

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>