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

Когда мое приложение для iOS закрывается, оно регистрирует серию локальных уведомлений, которые обновляют номер значка в определенное время. Локальные уведомления не вызывают всплывающее окно, они просто обновляют значок. На моем старом iPod touch, который не поддерживает многозадачность, это работает отлично. Однако на моих устройствах с поддержкой многозадачности я столкнулся с очень странной ошибкой: когда я «вышел» из приложения (т. е. оно все еще работает в фоновом режиме, но я делаю что-то еще), локальные уведомления не срабатывают. Есть ли причина, по которой локальные уведомления не срабатывают, когда приложение находится в фоновом режиме?

Код для создания локальных уведомлений выполняется в цикле (я создаю их кучу):

    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    localNotification.applicationIconBadgeNumber = totalCount; // a number generated earlier in the code
    localNotification.timeZone = [NSTimeZone defaultTimeZone];
    localNotification.fireDate = endDate; // a date generated earlier
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    [localNotification release];

А также я создал следующую функцию в своем делегате приложения, которая сообщает мне, сколько уведомлений настроено до того, как приложение перейдет в фоновый режим:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"# Notifications: %d", [[[UIApplication sharedApplication] scheduledLocalNotifications] count]);
}

Приложение постоянно говорит мне, что есть 64 уведомления (количество, которое следует настроить), когда оно переходит в фоновый режим.


person Jason    schedule 12.08.2011    source источник
comment
Можете ли вы показать нам код для запуска локального уведомления?   -  person Robin    schedule 12.08.2011
comment
Спасибо за предложение. Я добавил немного кода.   -  person Jason    schedule 12.08.2011
comment
Вы когда-нибудь исправляли это?   -  person newenglander    schedule 05.11.2013


Ответы (3)


Проверьте следующее из документации разработчиков Apple: «Каждое приложение на устройстве ограничено 64 запланированными локальными уведомлениями. Система отбрасывает запланированные уведомления, превышающие этот предел, оставляя только 64 уведомления, которые будут запущены в ближайшее время. Повторяющиеся уведомления рассматриваются как одно уведомление».

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

Дополнительную информацию можно найти на странице http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/WhatAreRemoteNotif.html

person Barbara R    schedule 04.06.2013

Что ж, @Jason, вам нужно установить alertBody из local notification, по крайней мере, чтобы показать предупреждение, вот и все, что нужно сделать.

Также, если вы не хотите отображать параметр просмотра в окне предупреждения, установите для атрибута hasAction значение НЕТ.

person Robin    schedule 12.08.2011
comment
Извините, это не дает точного ответа на мой вопрос... Мне не интересно показывать окно предупреждений. Я просто хочу обновить номер значка. - person Jason; 12.08.2011
comment
также вам необходимо проверить дату запуска, если дата предшествует текущей дате, тогда уведомление не будет запущено, просто приложение получило локальный метод уведомления в вашем делегате приложения. - person Robin; 12.08.2011

Быстрая версия:

func applicationDidEnterBackground(application: UIApplication) {
       let notification = UILocalNotification()
        notification.alertBody = "App has been entered in background" 
        notification.alertAction = "open" 
        notification.fireDate = NSDate() 
        notification.soundName = UILocalNotificationDefaultSoundName 
        UIApplication.sharedApplication().scheduleLocalNotification(notification)
    }
person Poonam    schedule 15.07.2016