2010-07-12 51 views
13

我使用处理本地通知:本地通知“didReceiveLocalNotification”调用两次

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

并安排本地通知:当我收到通知,didReceiveLocalNotification:被调用两次

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

我做错了什么?

请帮忙。

谢谢。

回答

27

我认为在模拟器中有一个已知的错误,它触发委托通知方法两次。它不应该发生在设备上,与XCode连接或不连接。

+7

我不确定为什么,但是我也在设备上面对这个问题(多次didReceiveLocalNotification),所以我维护一个称为状态的字段并手动检查该通知的状态字段,如果它已经被触发 – user1046037 2012-06-07 10:25:44

14

我也面临着同样的问题和解决方案,我发现是,在didReceiveLocalNotification

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

在这里这些条件我只是写,我想我的应用程序执行的代码编写代码通知,处于活动模式并处于非活动模式

1

我怀疑通知正在重新触发,只要它在同一秒内仍然存在。我通过在处理程序中将fireDate设置为零来固定它:

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

} 
1

我有同样的问题。这是由于在AppDelegate的'didFinishLaunchingWithOptions'中调用'registerUserNotificationSettings'两次造成的。但是,简单地删除重复呼叫并没有解决问题。我不得不删除应用程序,然后重建。只有这样,双重本地通知问题才得到解决。