Stuur een melding naar het meldingscentrum van Mountain lion

Kan iemand een voorbeeld geven van het verzenden van een testmelding van een Cocoa-app naar het Berichtencentrum? bijv. wanneer ik op een NSButton

klik


Antwoord 1, autoriteit 100%

Meldingen in Mountain Lion worden afgehandeld door twee klassen. NSUserNotificationen NSUserNotificationCenter. NSUserNotificationis je eigenlijke melding, het heeft een titel, een bericht etc. die kan worden ingesteld via eigenschappen. Om een ​​melding af te leveren die je hebt gemaakt, kun je de deliverNotification:-methode gebruiken die beschikbaar is in NSUserNotificationCenter. De Apple-documenten bevatten gedetailleerde informatie over NSUserNotification& NSUserNotificationCentermaar de basiscode om een ​​melding te plaatsen ziet er als volgt uit:

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

Dat geeft een melding met een titel, een bericht en dat speelt het standaardgeluid af wanneer het wordt weergegeven. Er is veel meer dat u met meldingen kunt doen dan alleen dit (zoals het plannen van meldingen) en dat staat allemaal beschreven in de documentatie waarnaar ik heb gelinkt.

Een klein puntje: meldingen worden alleen weergegeven als uw applicatie de belangrijkste applicatie is. Als u wilt dat uw meldingen worden weergegeven, ongeacht of uw toepassing de sleutel is of niet, moet u een gemachtigde opgeven voor NSUserNotificationCenteren de gemachtigdemethode userNotificationCenter:shouldPresentNotification:overschrijven zodat het JA retourneert. De documentatie voor NSUserNotificationCenterDelegateis te vinden hier

Hier is een voorbeeld van het verstrekken van een gemachtigde aan NSUserNotificationCenter en het afdwingen van de weergave van meldingen, ongeacht of uw toepassing de sleutel is. Bewerk het als volgt in het AppDelegate.m-bestand van uw toepassing:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
}
- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{
    return YES;
}

En verklaar in AppDelegate.h dat de klasse voldoet aan het NSUserNotificationCenterDelegate-protocol:

@interface AppDelegate : NSObject <NSApplicationDelegate, NSUserNotificationCenterDelegate>

Antwoord 2

@alexjohnj’s antwoord geüpdatet voor Swift 5.2

In AppDelegate

func applicationDidFinishLaunching(_ aNotification: Notification) {
  // Set delegate
  NSUserNotificationCenter.default.delegate = self
}

En bevestig vervolgens aan NSUserNotificationCenterDelegate als

extension AppDelegate: NSUserNotificationCenterDelegate {
 func userNotificationCenter(_ center: NSUserNotificationCenter, shouldPresent notification: NSUserNotification) -> Bool {
    true
}}

Other episodes