web-dev-qa-db-ja.com

Mountain Lion通知センターに通知を送信します

CocoaアプリからNotifications Centerにテスト通知を送信する例を教えてもらえますか?例えば。 NSButtonをクリックすると

56
haseo98

Mountain Lionでの通知は2つのクラスで処理されます。 NSUserNotificationおよびNSUserNotificationCenterNSUserNotificationは実際の通知であり、プロパティを介して設定できるタイトル、メッセージなどがあります。作成した通知を配信するには、NSUserNotificationCenterで利用可能なdeliverNotification:メソッドを使用できます。 Apple docsには NSUserNotificationNSUserNotificationCenter に関する詳細情報がありますが、通知を投稿する基本的なコードは次のようになります。

- (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];
}

これにより、タイトル、メッセージを含む通知が生成され、表示されたときにデフォルトのサウンドが再生されます。通知でできることはこれだけではありません(通知のスケジュール設定など)。これについては、リンク先のドキュメントで詳しく説明しています。

1つの小さな点は、アプリケーションが主要なアプリケーションである場合にのみ通知が表示されることです。アプリケーションがキーかどうかに関係なく通知を表示したい場合は、NSUserNotificationCenterのデリゲートを指定し、デリゲートメソッドuserNotificationCenter:shouldPresentNotification:をオーバーライドして、YESを返す必要があります。 NSUserNotificationCenterDelegateのドキュメントは here にあります。

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