Я использую NSNotificationCenter, чтобы установить переменную shared, когда уведомление поступает через 3 TableViewControllers (все подклассы из одного класса).NSNotificationCenter повторно выполняет уведомления
Все отлично работает по следующему сценарию, за исключением:
Пользователь находится в главном окне (вид, что на самом деле обрабатывает/реагирует на уведомления), когда приложение переходит в фоновом режиме (например, пользователь нажимает кнопку Home). Если приходит уведомление, и пользователь запускает приложение либо из значка, либо из предупреждения, которое ведет приложение, как если бы ему нужно обработать не только последнее уведомление, но и все уведомления в актуальном состоянии.
Например: let; предположим, что приложение обработало 5 уведомлений уже. Приложение переместилось на задний план, а затем появилось уведомление. Пользователь запускает приложение из значка, из-за чего приложение перемещается на передний план. Приложение будет вызывать 1 действие для каждого уведомления.
Это не тот случай, если пользователь находился на любом другом экране до того, как приложение переместилось на задний план. Однако, если пользователь перешел к основному виду, уведомление было обработано, и приложение снова переместилось на задний план, при следующем уведомлении приложение обработает 7 уведомлений (5 у нас было + 1 предыдущий + 1 ток).
Хотя концептуально кажется, что мое приложение порождает n-наблюдателей, мне непонятно почему. Я установил наблюдателя в базовом классе в viewWillAppear
и удалил в viewWillDisappear
(также пробовал блок deinit
- никаких изменений в поведении).
Любая идея, почему наблюдатель накапливает все уведомления? Это обычное поведение для наблюдателя? Если да, как удалить «наблюдаемые и обработанные» сообщения?
У меня создается впечатление, что это поможет много, если вы также разместите код + журналы –
Пробуя две вещи: 1. используя специальный removeObserver (в качестве противопоставления для удаления всех). 2. вызов removeObserver перед addObserver. 3. Добавление наблюдателя UIApplicationWillResignActiveNotification позволяет мне удалять наблюдателей, когда приложение перемещается на задний план. – goggelj
удалите наблюдателя уведомлений в одной точке приложения. – SahandTheGreat