2012-11-01 7 views
10

Używam NSUserNotification do wyświetlania powiadomień. To działa dobrze. Problem polega na tym, że po kliknięciu powiadomienia:NSUserNotification - Jak otworzyć aplikację po kliknięciu

  1. Powiadomienia o aplikacjach nie są usuwane z centrum powiadomień.
  2. Aplikacja (po zminimalizowaniu) nie otwiera się.

Ktoś znany z NSUserNotification, który może zaoferować kilka wskazówek?

notice.m

#import "Notice.h" 

@implementation Notice 

- (void) notify:(NSDictionary *)message { 

    NSLog(@"Notification - Show it"); 

    NSUserNotification *notification = [[NSUserNotification alloc] init]; 
    [notification setTitle:[message valueForKey:@"title"]]; 
    [notification setInformativeText:[message valueForKey:@"content"]]; 
    [notification setDeliveryDate:[NSDate dateWithTimeInterval:0 sinceDate:[NSDate date]]]; 
    [notification setSoundName:NSUserNotificationDefaultSoundName]; 
    NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; 
    [center scheduleNotification:notification]; 
} 

- (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification 
{ 

    NSLog(@"Notification - Clicked"); 

    notification=nil; 
    [center removeDeliveredNotification: notification]; 
} 







#pragma mark WebScripting Protocol 

+ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector 
{ 
    if (selector == @selector(notify:)) 
     return NO; 

    return YES; 
} 

+ (NSString*) webScriptNameForSelector:(SEL)selector 
{ 
    id result = nil; 

    if (selector == @selector(notify:)) { 
     result = @"notify"; 
    } 

    return result; 
} 

// right now exclude all properties (eg keys) 
+ (BOOL) isKeyExcludedFromWebScript:(const char*)name 
{ 
    return YES; 
} 

@end 

Dziękuję

+0

[[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate: self]; –

Odpowiedz

11

Wystarczy wdrożyć NSUserNotificationCenterDelegate i zdefiniować tę metodę:

- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification 

Przykład:

To, co zrobiłem w "notifie r "wniosek.

- (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification 
{ 
    NSRunAlertPanel([notification title], [notification informativeText], @"Ok", nil, nil); 
} 

- (void) userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification 
{ 
    notifications=nil; 
    [tableView reloadData]; 
    [center removeDeliveredNotification: notification]; 
} 

Gdy zgłoszenie jest aktywna (kliknij przez użytkownika) po prostu poinformować użytkownika z panelem (można użyć okna HUD) .W tym przypadku natychmiast usunąć dostarczonego powiadomienia, ale to nie to, co jest Zdarza się zwykle. Powiadomienie może pozostać w tym czasie i zostać usunięte po upływie 1/2 godziny (w zależności od aplikacji, którą tworzysz).

+5

Nie zapomnij ustawić się jako delegat. Nie deklaruj nikomu, że możesz być delegatem, nic nie osiągniesz, jeśli nigdy nie zostaniesz delegatem w żadnym momencie. –

+0

Czy mógłbyś uaktualnić powyższe, aby się nauczyć? Jestem nowy i próbuję się podnieść. Naprawdę to doceniam. – AnApprentice

+0

Czy służy to również do usuwania powiadomień lub otwierania aplikacji ze zminimalizowanego ukrytego widoku? Przypuszczam, że zadałem dwa pytania :) – AnApprentice

Powiązane problemy