Отклонить уже доставленное UILocalNotification?

Можно ли сделать это?UIApplication's scheduledLocalNotifications похоже, не возвращает уведомления, которые уже были доставлены в центр уведомлений пользователя, поэтому я думаю, что это может быть сделано намеренно, но я не могу найти никаких документально подтвержденных доказательств этого.

Кто-нибудь знает?

Спасибо!

РЕДАКТИРОВАТЬ: нашел это:

You can cancel a specific scheduled notification by calling cancelLocalNotification: on the application object, and you can cancel all scheduled notifications by calling cancelAllLocalNotifications. Both of these methods also programmatically dismiss a currently

Вот:http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html

Тем не менее, как я могу получить ссылку на уже доставленное уведомление, еслиscheduledLocalNotifications не дает мне уведомления, которые уже были доставлены?

РЕДАКТИРОВАТЬ 2:

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

UIApplication *app = [UIApplication sharedApplication];

for (UILocalNotification *localNotification in app.scheduledLocalNotifications) 
{
     if (someCondition) {
            [app cancelLocalNotification:localNotification];
        }
     }
}

Проблема состоит в том, что после того, как они доставлены, они больше не находятся в «запланированных локальных уведомлениях».

 rishi18 мая 2012 г., 14:02
можешь показать какой-нибудь код, как ты его используешь?
 elsurudo18 мая 2012 г., 14:28
Конечно, только что обновленный вопрос с некоторым кодом.

Ответы на вопрос(6)

Решение Вопроса

добавив вновь созданные уведомления в свои собственныеNSMutableArray уведомлений и проверьте этот массив вместоapp.scheduledLocalNotifications. Что-то вроде этого

ДобавитьNSMutableArray в ваш файл Viewcontrollers .h:

NSMutableArray *currentNotifications;

Инициируйте его при запуске ViewController

currentNotifications = [[NSMutableArray alloc] init];

При инициировании уведомления также добавьте его в свой массив:

UILocalNotification *notification = [[UILocalNotification alloc] init];
...
[currentNotifications addObject:notification];
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];

Позднее, если вы хотите отменить это уведомление, поищите его в своем массиве. Также удалите его из массива:

for (UILocalNotification *notification in currentNotifications) {
    if (someCondition) {
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
        [currentNotifications removeObject:notification];
    }
}
 Vijay Sanghavi01 авг. 2016 г., 13:35
Это всего лишь работа вокруг
 steveluscher14 мая 2013 г., 02:36
Это будет работать, пока ваше приложение остается резидентным. Как только он уйдет в отставку,currentNotifications будет тост. Хотелось бы, чтобы был способ составить список доставленных уведомлений, @ elsurudo.
 Marek Jalovec13 сент. 2016 г., 11:19
у меня с ios 9.3.5 это не работает, уведомления остаются в центре уведомлений

Apple Doc

Некоторое учебное пособие

И локальное уведомление регистрируется в центре уведомлений устройства, а не в вашем приложении.

Но, если ваше приложение работает, и время уведомления, вы можете получить параметры уведомления в игре в:

-(void) application:(UIApplication*)app didReceiveLocalNotification:(UILocalNotification*) notification
{
// local notification is geted
}
 elsurudo18 мая 2012 г., 14:25
Да, я уже читал их. Но я хочу удалить конкретное уведомление в более позднее (произвольное) время, а не только при первом получени

если вы перешли на использованиеUNUserNotificationCenter.

Состояние документов Apple:

func getDeliveredNotifications(completionHandler: @escaping ([UNNotification]) -> Void)

Предоставляет вам список уведомлений приложения, которые все еще отображаются в Центре уведомлений.

func removeDeliveredNotifications(withIdentifiers: [String])

Удаляет указанные уведомления из Центра уведомлений.

func removeAllDeliveredNotifications()

Удаляет все уведомления приложения из Центра уведомлений.

если также сохраните его в NSUserDefaults, используя NSKeyedArchiver для преобразования его в NSData.

Чтобы вернуть его в качестве UILocalNotification, вы используете NSKeyedUnarchiver. Затем вы можете удалить его, используя метод cancelLocalNotification.

Полностью объяснилВо (Swift версия + ссылка на оригинальное решение Obj-C)

что я хотел «очистить» все связанные с приложением уведомления, находящиеся в центре уведомлений, на тот случай, если пользователь откроет приложение из его значка на панели инструментов (так как это деланичего таког на ранее запущенные уведомления ...)

К счастью, похоже, чтоcancelAllNotifications не просто отменяет запланированные, но ВСЕ. Поэтому я просто держался за ссылку на существующие запланированные уведомления, а затем перенес их на другое:

UIApplication *app = [UIApplication sharedApplication];

NSLog(@"\nScheduled notif count (prior) = %d", app.scheduledLocalNotifications.count);

NSArray *scheduledNotifs = app.scheduledLocalNotifications; // hold on to a reference

[[UIApplication sharedApplication] cancelAllLocalNotifications]; // blast everything

NSLog(@"\nScheduled notif count (post-wipeout) = %d", app.scheduledLocalNotifications.count);

for (UILocalNotification *notif in scheduledNotifs) {
    [app scheduleLocalNotification:notif]; // put them back
}

NSLog(@"\nScheduled notif count (post-repopulation) = %d", app.scheduledLocalNotifications.count);

Не уверен, что это кому-нибудь поможет, но в моей ситуации это отлично сработало.

что вы заинтересованы в отмене всех уведомлений с помощью цикла for, чтобы вы могли использовать -

 [[UIApplication sharedApplication] cancelAllLocalNotifications];
 elsurudo18 мая 2012 г., 16:32
Ой. В моем фактическом коде у меня есть условие вокруг [app cancelLocalNotification: localNotification], так что cancelAllLocalNotifications не сработает. Я обновлю свой фрагмент кода, чтобы соответствовать этому.

Ваш ответ на вопрос