Локальные уведомления отображаются дважды

Бывают случаи, когда локальное уведомление моего приложения запускается (отображается) дважды. Я использую не симулятор, а реальное устройство. Я пытался получить шаг воспроизведения, но я не мог этого сделать. Каждый раз, когда я выполняю процесс с помощью точки останова/nslog, я всегда получаю 1 запланированное уведомление. При этом я предполагаю, что я получу только 1 отображаемое/запускаемое уведомление. Однако бывают случаи, когда я получаю два уведомления. Я искал ответы в Интернете, и я не мог получить много информации. Кто-нибудь здесь испытал то же самое? Как вы смогли решить проблему?

- (void)scheduleAllNotifications
{
    if (_isEnabled && [[NSUserDefaults standardUserDefaults] boolForKey:NotificationsUserDefaultsKey]) {
        [self updateFireDates];
        for (NSDate *fireDate in fireDates) {
            UILocalNotification *notification = [[UILocalNotification alloc] init];
            notification.fireDate = fireDate;
            notification.alertBody = @"Message";
            notification.alertAction = @"View";
            notification.soundName = @"notificationsound.mp3";
            [notifications addObject:notification];

            [[UIApplication sharedApplication]scheduleLocalNotification:notification];
        }
    }
}



- (void)cancelAllNotifications
{
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    [notifications removeAllObjects];

}

- (void)updateFireDates
{
    [fireDates removeAllObjects];
    NSDate *now = [NSDate date];
    NSDate *fireDate = [NSDate dateWithTimeInterval:THREEDAYS sinceDate:now];
    if (fireDate){[fireDates addObject:fireDate];}
}

CancelAllNotifications вызывается каждый раз, когда приложение становится активным; shceduleAllNotifications вызывается каждый раз, когда приложение выходит из активного режима.


person cessmestreet    schedule 23.08.2013    source источник
comment
Покажите свой код, как добавлять и проверять уведомления.   -  person Wain    schedule 23.08.2013
comment
я уже добавил свой код. Благодарность   -  person cessmestreet    schedule 24.08.2013


Ответы (2)


Барт Доу прав, это случайные уведомления от предыдущих тестовых прогонов.

Чтобы решить эту проблему, вызовите [[UIApplication sharedApplication] cancelAllLocalNotifications]; в AppDelegate в пределах - (void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions, чтобы очистить все предыдущие запланированные уведомления.

person Long Le    schedule 03.09.2015
comment
Та же проблема здесь. Бродячие уведомления. Все, что я сделал, это удалил приложение, и они исчезли, когда я снова установил. Надеюсь, этого не произойдет во время производства. - person Dpedrinha; 01.06.2016

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

Что вы можете сделать, так это поместить дополнительную отладочную информацию в поле userInfo. Вы можете поместить туда номер сборки или дату/время создания и тому подобное. Затем регистрируйте их всякий раз, когда срабатывает уведомление.

Возможно, вы действительно столкнулись с ошибкой: локальное уведомление сделалReceiveLocalNotification дважды

person Bart van Kuik    schedule 23.08.2013
comment
на самом деле, я не был в состоянии отладки, когда это произошло. я просто играл с ним после того, как он был выпущен. - person cessmestreet; 23.08.2013