本地通知“didReceiveLocalNotification”调用了两次

Posted

技术标签:

【中文标题】本地通知“didReceiveLocalNotification”调用了两次【英文标题】:local notification "didReceiveLocalNotification" calls twice 【发布时间】:2010-07-12 09:04:20 【问题描述】:

我正在使用以下方式处理本地通知:

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

并安排本地通知:

- (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");

当我收到通知时,didReceiveLocalNotification: 会被调用两次。

我做错了吗?

请帮忙。

谢谢。

【问题讨论】:

【参考方案1】:

我认为模拟器中有一个已知错误,它会触发委托通知方法两次。它不应该发生在设备上,无论是否绑定到 XCode。

【讨论】:

不知道为什么,但我在设备上也遇到了这个问题(didReceiveLocalNotification 多次),所以我维护一个名为 status 的字段并手动检查该通知的状态字段(如果它已经存在)解雇【参考方案2】:

我也面临同样的问题,我找到的解决方案是在 didReceiveLocalNotification

中编写此代码
if (state == UIApplicationStateActive) 
    NSLog(@"UIApplicationStateActive"); 

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

在这种情况下,我只是编写我希望我的应用程序在通知、活动模式和非活动模式下执行的代码

【讨论】:

【参考方案3】:

我怀疑通知在同一秒内被重新触发。我通过在处理程序中将 fireDate 设置为 nil 来修复它:

- (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】:

我有同样的发行。这是由于在 AppDelegate 的“didFinishLaunchingWithOptions”中两次调用“registerUserNotificationSettings”引起的。但是,简单地删除重复调用并不能解决问题。我不得不删除该应用程序,然后重建。直到那时,双重本地通知问题才得到解决。

【讨论】:

以上是关于本地通知“didReceiveLocalNotification”调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

iOS(本地通知与远程通知)

本地通知和推送通知

本地通知

iOS开发本地通知

如果在 iOS 设置中禁用通知访问时安排本地通知,则不会在 iOS 13 上触发本地通知

iOS开发——本地通知