iOS NSNotification - как безопасно игнорировать при выходе из приостановленного - PullRequest
0 голосов
/ 04 ноября 2011

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

Я надеюсь, что установка removeObserver - это applicationWillEnterForeground, но я не смог ничего найти об этом в документе NSNotification.

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

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

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

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

0 голосов
/ 04 ноября 2011

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

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

...