локальное уведомление "didReceiveLocalNotification" вызывает дважды - PullRequest
13 голосов
/ 12 июля 2010

Я обрабатываю локальные уведомления, используя:

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

27 голосов
/ 31 июля 2010

Я думаю, что есть известная ошибка в симуляторе, которая запускает метод уведомления делегата дважды.Это не должно происходить на устройстве, привязанном к XCode или нет.

14 голосов
/ 20 августа 2011

Я также столкнулся с той же проблемой, и решение, которое я нашел, состоит в том, чтобы написать этот код в didReceiveLocalNotification

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

здесь, в этих условиях я просто пишу код, который я хочумое приложение, чтобы сделать уведомление, в активном режиме и в неактивном режиме

1 голос
/ 25 февраля 2016

У меня был такой же выданный.Это было вызвано двойным вызовом registerUserNotificationSettings в 'didFinishLaunchingWithOptions AppDelegate'Однако простое удаление дублирующего вызова еще не решило проблему.Мне пришлось удалить приложение, а затем восстановить.Только тогда проблема двойного локального уведомления была исправлена.

1 голос
/ 29 декабря 2013

Я подозреваю, что уведомление перезапускается до тех пор, пока оно находится в той же секунде.Я исправил это, установив 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;

}
...