本地通知“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”调用了两次的主要内容,如果未能解决你的问题,请参考以下文章