2011-02-07 2 views
6

У моего приложения есть функция будильника с использованием UILocalNotification, и он отлично работает. Однако, если пользователь удаляет приложение, а затем REINSTALLS, он будет получать все «промежуточные» уведомления сразу.UILocalNotification запускается после переустановки приложения

Я пытался позвонить:

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

, если это первый раз, когда приложение запускается, но это не помогает, потому что уведомление получено еще до применения: didFinishLaunchingWithOptions: называется.

Это было хуже в 4.0, когда будильник был повторен, даже если пользователь удалил приложение, но по крайней мере эта ошибка была исправлена ​​Apple в более позднем выпуске. Однако теперь я застрял в этом. У кого-то есть идея?

+0

Привет, у вас есть какое-либо решение этой проблемы ... –

ответ

6

Это на самом деле ошибка в iPhone. Если вы удалили приложение и затем установили его позже, он будет иметь одинаковый идентификатор приложения, поэтому, когда приложение будет переустановлено, все прошлые локальные уведомления были запущены, даже если вы не открыли приложение.

+0

Для пользователей iOS 4.0, 4.1 ..., как вы думаете, есть ли какие-нибудь способы обхода? Потому что это будет крайне раздражать, чтобы получать эти повторяющиеся сигналы тревоги, чтобы отключить его (4.0). –

+0

нет другого выхода, вот почему они подали ошибку – KingofBliss

+0

Я по-прежнему вижу это поведение с 4.3, особенно при запуске (установке) через XCode. – Gregir

15

Согласно Apple, это не ошибка (я подал отчет об ошибке). Система сохраняет UILocalNotifications для удаленных приложений в течение 24 часов на случай, если пользователь случайно удалит приложение, и восстановит указанные UILocalNotifications, если приложение будет повторно установлено в течение этого периода времени.

Решение было бы удалить все UILocalNotifications при первом запуске, например, так:

- (BOOL)   application: (UIApplication*) application 
didFinishLaunchingWithOptions: (NSDictionary*) launchOptions 
{ 
    if (self.isFirstRun) 
    { 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
    self.firstRun = NO; 
    } 

    /* Other code here */ 
    ... 
} 

конечно, реализовать свой собственный firstRun и присваивателя для извлечения/сохранения в постоянной памяти, как NSUserDefaults.

+0

Является ли эта «функция» документированной где-нибудь? –

+0

+1 Это кажется довольно глупым. Приложение не владеет уведомлениями, когда они переданы ОС, что ясно, когда вы пытаетесь планировать 65 уведомлений вместо максимум 64. Приложение должно нести ответственность за хранение своего собственного представления о том, что означает уведомление - не полагаться на ОС. Если такое приложение запускается без предварительного уведомления об этих уведомлениях, это просто мусор. – Andreas

Смежные вопросы