I am using NSUserNotificationCenter to display scheduled Notifications. I have 
notifications of my app in the right side notification panel so whenever I 
click on the notification it'll launch the app but it won't remove notification 
from the panel.

1. When app is not running and I clicked on the notification, 
applicationDidFinishLaunching is called and it won't remove notification 
because didActivateNotification delegate is not called.
2. When application is already running and I clicked on the notification, 
appShouldHandleReopen is called. And won't call the delegate.

-(void)userNotificationCenter:(id)center 
didActivateNotification:(id)notification

I checked behavior in all the standard app they will remove notification when 
user click on the notifications.

I have implemented it as follows:

    /* will create notification and set the delegate*/
    @interface NotificationViewController : NSViewController
    {
    id delegate;
    }
    -(void)showNotification;
    @end
    
    @implementation NotificationViewController
    - (void)createNotification:(NSString*)str
    {
    
    Class UserNotificationClass=NSClassFromString(@"NSUserNotification");
    id notification = [[UserNotificationClass alloc] init];
    //Set the title of the notification
    [notification setTitle:@"My Notification"];
    [notification setSubtitle:@"Test"];
    [notification setHasActionButton:YES];
    [notification setActionButtonTitle:@"OK"];
    [notification setOtherButtonTitle:@"CANCEL"];
    
    //Set the text of the notification
    [notification setInformativeText:str];
    [notification setDeliveryDate:[NSDate dateWithTimeInterval:0.1 
sinceDate:[NSDate date]]];
    [notification setSoundName:@"NSUserNotificationDefaultSoundName"];
    [notification setUserInfo:[NSDictionary 
dictionaryWithObjectsAndKeys:str,@"string",nil]];
    
    Class 
UserNotificationCenterClass=NSClassFromString(@"NSUserNotificationCenter");
    id center = [UserNotificationCenterClass defaultUserNotificationCenter];
    [center setDelegate:self.delegate];
    
    //Scheldule our NSUserNotification
    [center scheduleNotification:notification];
    [notification release];
    }
    @end

    /* Class which implements NSUserNotificationDelegate
    
    @interface NotificationHandler : NSObject <NSUserNotificationCenterDelegate>
    {
    
    }
    - (void)createNotification:(NSString*)str;
    @end
    
    
    @implementation NotificationHandler
    - (void)createNotification:(NSString*)str
    {
    NotificationHandler *notificationHandler = [[NotificationHandler alloc] 
initWithNibName:@"NotificationHandler" bundle:[NSBundle mainBundle]];
    notificationHandler.delegate = self;
    [notificationHandler showNotification];
    }
    
    - (void)userNotificationCenter:(id)center 
didActivateNotification:(id)notification
    {
    [center removeDeliveredNotification:notification];
    }
    
    - (BOOL)userNotificationCenter:(id)center 
shouldPresentNotification:(id)notification
    {
      return YES;
    }
    @end

However this is not working in my case. Please let me know some pointer on it...

**Other thing I observed:**

 - When I implement NSUserNotificationDelegate into AppDelegate it'll work for 
2nd case i.e. (When application is already running and I clicked on the 
notification) - in this case notification is removed.
 - And for deleting notification for 1st case i.e. (When app is not running and 
I clicked on the notification, appDidFinishLaunching is called) I wrote 
following code in appDidFinishLaunching.

    NSUserNotification *userNoti = [[notification userInfo] 
valueForKey:@"NSApplicationLaunchUserNotificationKey"];
    [[NSUserNotificationCenter defaultUserNotificationCenter] 
removeDeliveredNotification:userNoti];

- Can anybody let me know whats the reason, why this works in the AppDelegate 
but not in my above implementation or Am I doing something wrong in first one?
- Is my AppDelegate implementation fine to handle my both scenarios? 

Thanks in Advance.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to