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 ([email protected])
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 [email protected]