it-swarm.com.ru

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

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

56
haseo98

Уведомления в 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];
    [notification release];
}

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

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

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

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

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

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

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>
152
alexjohnj