Таблица отправки для NSNotifications очищена без причины.

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

MainViewController является наблюдателем для 4 уведомлений в viewDidLoad. У меня есть четыре метода обработки для каждого уведомления. Я отменяю регистрацию для этих уведомлений в dealloc.

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

Почему это происходит? Это дизайн или я что-то упустил?

Экземпляр mainViewController не уничтожен, он все еще существует в стеке навигации, dealloc не вызывается, так почему бы его отменить?

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

Любая помощь?

1 ответ

[Это своего рода косвенный ответ, извинения.]

Я предполагаю, что вы недовольны стандартным способом работы Apple и пытаетесь найти что-то лучшее. Если это так, вы не одиноки.

Если вы не знаете об этом, вы можете проверить концепцию "Model View ViewModel", ReactiveCocoa и ReactiveViewModel. ReactiveCocoa может быть крутой концептуальной скалой для лазания, но если вы уже путешествуете, стоит попробовать.

Другие вопросы по тегам