local notification “didReceiveLocalNotification” calls twice

落花浮王杯 提交于 2019-11-27 02:14:07

问题


I am handling local notifications using:

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif

And to schedule a local notification:

- (void)scheduleNotificationWithInterval:(int)minutesBefore {
    UILocalNotification *localNotif = [[UILocalNotification alloc] init];

    if (localNotif == nil)
        return;

    NSDate *fireDate = [NSDate date];
    localNotif.fireDate = [fireDate dateByAddingTimeInterval:minutesBefore*60];
    localNotif.timeZone = [NSTimeZone defaultTimeZone];
    localNotif.repeatInterval = kCFCalendarUnitMinute;
    localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"LocalEvent notification in %i minutes.", nil),minutesBefore];
    localNotif.alertAction = NSLocalizedString(@"View Details", nil);
    localNotif.applicationIconBadgeNumber = 1;

    NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"This is dict, you can pass info for your notification",@"info",nil];
    localNotif.userInfo = infoDict;

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];

    [localNotif release];
    NSLog(@"Event scheduled");
}

When I receive a notification, didReceiveLocalNotification: is called twice.

Am I doing something wrong?

Please help.

Thanks.


回答1:


I think there is a known bug in the simulator, that fires the delegate notification method twice. It should not happen on the device, tethered to XCode or not.




回答2:


i was also facing the same problem and the solution which i find is that write this code in didReceiveLocalNotification

if (state == UIApplicationStateActive) {
    NSLog(@"UIApplicationStateActive"); 
}
else if(state == UIApplicationStateInactive){
    NSLog(@"UIApplicationStateInActive");
}

here in these condition i just write the code which i want my application to do on notification , in Active mode and in inactive mode




回答3:


I suspect that the notification is being retriggered as long as its in the same second still. I fixed it by setting the fireDate to nil in the handler:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:notification.alertAction message:notification.alertBody delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];

    notification.fireDate = nil;

}



回答4:


I had the same issued. It was caused by calling 'registerUserNotificationSettings' twice in the AppDelegate's 'didFinishLaunchingWithOptions.' However, simply removing the duplicate call did not fix the problem yet. I had to delete the app and then rebuild. Only then did the double local notification issue get fixed.



来源:https://stackoverflow.com/questions/3227080/local-notification-didreceivelocalnotification-calls-twice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!