У меня есть навигационный контроллер, который я повторно использую для своего экрана-заставки.Всякий раз, когда я выхожу из системы, я сбрасываю массив 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 ...)