Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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:, чтобы он возвращал 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>