iOS NSNotification — как безопасно игнорировать при выходе из приостановленного

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

Я надеюсь, что установка removeObserver is applicationWillEnterForeground поможет, но я ничего не нашел об этом в документе NSNotification.

Изменить: позвольте мне добавить детали сценария:

Приложение, над которым я работаю, проверяет изменения в событиях календаря в течение следующих 7 дней. Он обновляет свои данные (запрашивает eventStore) два раза: 1. Когда приходит NSNotification из календаря iPhone об изменениях. 2. В первый раз приложение может в новый день, потому что диапазон 7 дней изменился.

Проблема проектирования, с которой я сталкиваюсь, - это случай, когда оба сценария верны одновременно (приложение возвращается после приостановки, и это новый день, и события календаря были изменены, пока приложение было приостановлено). В этом случае я хочу запросить хранилище событий только один раз. Моя идея состоит в том, чтобы в applicationWillEnterForeground, в случае, если это первый запуск дня, указать приложению игнорировать или удалять любые уведомления. У меня складывается впечатление, что мои предположения о том, как NSNotifications будут работать в этом случае, могут быть ошибочными. Любое руководство было бы здорово!


person kris    schedule 04.11.2011    source источник


Ответы (2)


Почему бы не удалить наблюдателя из центра уведомлений в -applicationDidEnterBackground:?

Затем вы можете снова начать наблюдение в -applicationWillEnterForeground:.

person Jasarien    schedule 04.11.2011
comment
Спасибо за мысль, но в большинстве случаев необходимы уведомления, которые произошли, когда приложение было приостановлено. Но есть случаи, когда это не так, что не очевидно, пока приложение снова не станет активным. - person kris; 04.11.2011

Какие NSNotifications приходят, когда вы заблокированы? Вы выполняете фоновую задачу?

Я не могу представить себе случай, когда не отвечать на NSNotification было бы хорошей идеей. По сути, это такие же сообщения, как и любые другие, только с другим механизмом маршрутизации.

UILocalNotification будет другой проблемой.

person David Dunham    schedule 04.11.2011
comment
Дэвид, я добавил сценарий, о котором пытаюсь рассказать, в первоначальных комментариях. Я не запускаю фоновую задачу, но я понимаю, что после того, как приложение выйдет из состояния приостановки, любое уведомление, которое было отправлено (или было предпринято для отправки), будет обработано (или отправлено) приложением. - person kris; 04.11.2011
comment
Хорошо, я не знаком с EK, но он говорит об изменении во время работы вашего приложения. Который, если он приостановлен, это не так. Но я предполагаю, что документация вводит в заблуждение. С другой стороны, стоит ли об этом беспокоиться? Запрашивать 7 дней так дорого? Если это действительно так, вы всегда можете установить какое-то состояние, которое мне нужно обновить, а затем запустить слегка отложенное обновление (performSelector:withObject:afterDelay:), если это состояние еще не установлено. - person David Dunham; 04.11.2011
comment
PerformSelector:withObject:afterDelay: похоже на то, что нужно для моего случая, так как я также вижу, что могут собираться несколько уведомлений EKEventChangeNotifications (я думал, что приложение получит только одно, максимум). Что касается дорогостоящей операции, если она выполняется дважды, это хорошо, что, вероятно, это не так, но я сохраняю данные из EKevents в основных данных и обновляю их дважды, а затем основные данные обновляют соответствующие FRC, которые обновляют пользовательский интерфейс. , звучит не очень хорошо для меня. - person kris; 04.11.2011