13

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

- (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:会调用两次。

难道我做错了什么?

请帮忙。

谢谢。

4

4 回答 4

27

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

于 2010-07-30T20:37:20.540 回答
14

我也面临同样的问题,我找到的解决方案是在didReceiveLocalNotification中编写此代码

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

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

于 2011-08-20T07:59:10.303 回答
1

我怀疑通知会在同一秒内被重新触发。我通过在处理程序中将 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;

}
于 2013-12-29T03:16:42.517 回答
1

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

于 2016-02-25T17:55:52.953 回答