2015-10-14 1 views
0

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

Все отлично работает по следующему сценарию, за исключением:

Пользователь находится в главном окне (вид, что на самом деле обрабатывает/реагирует на уведомления), когда приложение переходит в фоновом режиме (например, пользователь нажимает кнопку Home). Если приходит уведомление, и пользователь запускает приложение либо из значка, либо из предупреждения, которое ведет приложение, как если бы ему нужно обработать не только последнее уведомление, но и все уведомления в актуальном состоянии.

Например: let; предположим, что приложение обработало 5 уведомлений уже. Приложение переместилось на задний план, а затем появилось уведомление. Пользователь запускает приложение из значка, из-за чего приложение перемещается на передний план. Приложение будет вызывать 1 действие для каждого уведомления.

Это не тот случай, если пользователь находился на любом другом экране до того, как приложение переместилось на задний план. Однако, если пользователь перешел к основному виду, уведомление было обработано, и приложение снова переместилось на задний план, при следующем уведомлении приложение обработает 7 уведомлений (5 у нас было + 1 предыдущий + 1 ток).

Хотя концептуально кажется, что мое приложение порождает n-наблюдателей, мне непонятно почему. Я установил наблюдателя в базовом классе в viewWillAppear и удалил в viewWillDisappear (также пробовал блок deinit - никаких изменений в поведении).

Любая идея, почему наблюдатель накапливает все уведомления? Это обычное поведение для наблюдателя? Если да, как удалить «наблюдаемые и обработанные» сообщения?

+0

У меня создается впечатление, что это поможет много, если вы также разместите код + журналы –

+0

Пробуя две вещи: 1. используя специальный removeObserver (в качестве противопоставления для удаления всех). 2. вызов removeObserver перед addObserver. 3. Добавление наблюдателя UIApplicationWillResignActiveNotification позволяет мне удалять наблюдателей, когда приложение перемещается на задний план. – goggelj

+0

удалите наблюдателя уведомлений в одной точке приложения. – SahandTheGreat

ответ

0

Решение моей проблемы состояло в том, чтобы удалить наблюдателя перед его добавлением.

Проблема сама по себе сводилась к тому, что порядок очистки (т. Е. Добавить наблюдателя в viewWillAppear, удалить наблюдателя viewWillDisappear) не соответствовал моим ожиданиям. В результате наблюдатель добавлялся снова и снова, но соответствующий «удалить» на самом деле не «произошел».

Я предполагаю, что это произошло из-за того, что добавление/удаление наблюдателей происходило в базовом классе (а не подклассе).