2013-08-14 6 views
2

Я не абсолютно уверен в том, как иметь дело с различными состояниями обработки локального уведомления (или нажатия на это).корректно обрабатывает параметры запуска и локальные уведомления

эти различные сценарии, насколько я их понимаю (поправьте меня, если я ошибаюсь):

а. приложение было на переднем плане

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{} 

становится называется и: application.applicationState == UIApplicationStateActive

б. приложение было в фоновом режиме

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{} 

становится называется и: application.applicationState == UIApplicationStateInactive

гр. приложение было прекращено, так:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{} 

становится называется первой и послесловие:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{} 

становится называется где application.applicationState == UIApplicationStateActive (так как он стал активным некоторое время после того, как didFinishLanching ...

в каждом из этих 3 сценариев я должен действовать по-другому:.

а, если приложение было на первом плане, я хотел бы показать эль rt, который показывает тело notificaiton, и нажимайте некоторые контроллеры представлений в стеке, если пользователь отклоняет предупреждение с помощью кнопки «Продолжить».

b. если приложение было в фоновом режиме, и пользователь нажал на предупреждение, то я хотел бы автоматически нажимать контроллеры представления в стек, так как нажатие на предупреждение пользователя указывает, что он хочет следовать его значению.

c. те же сценарии, что и b. пользователь нажал на предупреждение и ожидает увидеть соответствующие представления.

Мой вопрос в том, как/где я должен нажимать соответствующие представления на навигационный контролер и как отображать предупреждение при получении уведомления на переднем плане?

Проблема заключается в том, что сценарий c содержит сценарий a. это означает, что после того, как didFinishlaunching получил вызов (неважно, обрабатывал ли я уведомление там или нет), тогда didRecieveLocalNotification получает вызов (как если бы я получил уведомление на переднем плане), но в этом случае я бы не хотел отображать предупреждение. .

Является ли я неверным о предположениях для начала?

+0

Для сценария C 'didReceiveLocalNotification' не вызывается, вызывается только' doneFinishLaunchingWithOptions'. Поскольку это методы делегирования приложений, они могут получать события в любое время, и вы можете делать все, что от вас требуется. Может быть, задавать более конкретные вопросы, по одному за раз. –

+0

@MarcusAdams, thx. Я на самом деле задал очень конкретный вопрос и последовал за ним со мной. Сначала у меня были свои предположения. И я сделал, как вы сказали, метод didReceiveLocalNotification не вызывается в сценарии C, что упрощает все. Переходите и конвертируйте свой комментарий в ответ, и я соглашусь с ним. –

ответ

0

Для сценария C, didReceiveLocalNotification не вызывается, вызывается только didFinishLaunchingWithOptions.

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

Например, вы можете показать UIAlertView прямо из didFinishLaunchingWithOptions (до дефолта return YES;) и установите приложение делегата также делегирует UIAlertView «s, так что вы можете справиться с увольнением предупреждения.

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

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