Несуществующий контроллер представления, вызывающий viewDidAppear - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть навигационный контроллер, который я повторно использую для своего экрана-заставки.Всякий раз, когда я выхожу из системы, я сбрасываю массив viewControllers navigationController только на один экран Splash.Однако я получаю странное поведение.

Шаги:

Появляется Splash - модальное отображение, навигация ControlController с одним представлением Splash viewController в качестве корневого пользователя Выберите «Вход» - представление входа перемещается на NavКонтроллер

Ввод информации, отправка, успех, отклонение модального представления.

Пройдите через приложение .... затем выйдите из системы снова

Замените модальную навигациюКонтроллеры viewController (в настоящее время Splash -> SignIn) с недавно созданным viewController (Splash).

Настоящий модальный ViewController

НЕОЖИДАННОЕ ПОВЕДЕНИЕ **

Оригинал "Вход "Вызывается метод viewDidAppear View Controller.

Кроме вызова ViewDidAppear контроллера представления" Вход в систему ", все ведет себя как обычно.Появляется новый Splash, я могу запустить новый вход, без проблем.Все продолжается как обычно.

У меня есть NSNotificationCenter addObserver в моем viewDidAppear, поэтому этот дополнительный вызов метода viewDidAppear отбрасывает поведение в приложении еще где, поэтому мне нужно выяснить, откуда это происходит иисправить это.

Backtrace Приостановлено на ошибочном «viewDidAppear»

Thread 1, Queue : (null)
0   0x000f1881 in -[KeyboardViewController viewDidAppear:] at /Users/Me/App/Classes/KeyboardViewController.m:69
1   0x00d79fbf in -[UIViewController _setViewAppearState:isAnimating:] ()
2   0x00d7a2d4 in -[UIViewController __viewDidAppear:] ()
3   0x00d7b8c9 in __64-[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:]_block_invoke_0 ()
4   0x00d7a730 in -[UIViewController _executeAfterAppearanceBlock] ()
5   0x00cc35ea in _afterCACommitHandler ()
6   0x01dfa9ce in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
7   0x01d91670 in __CFRunLoopDoObservers ()
8   0x01d5d4f6 in __CFRunLoopRun ()
9   0x01d5cdb4 in CFRunLoopRunSpecific ()
10  0x01d5cccb in CFRunLoopRunInMode ()
11  0x0261b879 in GSEventRunModal ()
12  0x0261b93e in GSEventRun ()
13  0x00cb2a9b in UIApplicationMain ()
14  0x000028d9 in main ()

Если я запишу popToRootViewController в navigationController до его закрытия, эта проблема исчезнет.Однако, если я подожду 0,5 секунды и уволюсь, как только навигационный контроллер уже будет удален, проблема не исчезнет.В идеале, я не хочу, чтобы popToRootViewController был запущен ...

Затем, когда я вызывал popToRootViewController перед удалением, метод viewDidDisappear не вызывался ... На данный момент я получил взломместо, которое делает снимок текущего стека viewControllers, заменяет их, загружает представление, затем выполняет итерацию по сохраненному стеку контроллеров, отменяя код, который выполняется в методе viewDidAppear (NSNotification stuff ...)

Ответы [ 2 ]

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

Как вы сказали

Каждый раз, когда я выхожу из системы, я сбрасываю viewControllers навигационного контроллера массив только для одного экрана Splash.

Это указывает на то, что вы снова настраиваете viewControllers navigationController, а не сам NavigationController.

Это происходит потому, что всякий раз, когда мы помещаем новый массив viewcontroller в стек навигации, перед выпуском более раннего viewcontroller он вызывает их методы отображения вида.

У меня была такая же проблема. Я создал навигационный контроллер снова, а не повторно использовал старый (я выпустил его).

Спасибо

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

Я не уверен, почему это происходит, но я думаю, что было бы лучше вызвать popToRootViewController:NO на контроллере навигации, чтобы сбросить его, а не изменять вручную его массив viewControllers.

Попробуйте и посмотрите, есть ли проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...