Представление появляется с анимацией модального представления вместо показа (нажатия) анимации

Недавно я обновил свое приложение с iOS 8.3 до iOS 9. После исправления различных ошибок в коде мне удалось скомпилировать приложение и запустить его, когда я заметил следующую проблему.

Когда я выполняю переходный щелчок, например, UIButton, представление, загруженное с переходом, появляется с анимацией модального представления (скользит снизу, пока не достигнет верха), но в раскадровке переход Show (e.g. Push). Кроме того, кнопка «Назад» на навигационном контроллере больше не появляется.

Консоль печатает это, когда я выполняю переход:

Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController: 0x7ffde14866b0>)

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


person QUB3X    schedule 23.06.2015    source источник
comment
Пожалуйста, опубликуйте код, который вызывается, чтобы представить новый контроллер представления с неожиданной анимацией.   -  person ndmeiri    schedule 23.06.2015
comment
@ndmeiri на самом деле кода нет: я использовал раскадровку, чтобы сделать переход.   -  person QUB3X    schedule 23.06.2015
comment
Оба ваших контроллера представления находятся в одной и той же раскадровке? И вы убедились, что контроллер начального представления в этой раскадровке установлен на UINavigationController?   -  person ndmeiri    schedule 23.06.2015
comment
Да, они есть, и NavigationController теперь установлен в Initial View Controller, но ничего не меняется. Если удалить контроллеры навигации перед представлениями, все работает правильно.   -  person QUB3X    schedule 23.06.2015
comment
Хм, а можно мне как-нибудь взглянуть на ваш проект? Трудно отлаживать, не видя этого.   -  person ndmeiri    schedule 23.06.2015
comment
@ndmeiri конечно, это на github: github.com/QUB3X/Hearthdeck   -  person QUB3X    schedule 23.06.2015
comment
Давайте продолжим обсуждение в чате.   -  person QUB3X    schedule 23.06.2015
comment
У меня та же проблема. Удаление запасных навигационных контроллеров, как предлагается ниже, решает проблему, но, по-видимому, это скорее обходной путь, чем решение. На форумах разработчиков Apple есть несколько людей, которые предполагают, что это может быть ошибка. forums.developer.apple.com/thread/4201   -  person Erik    schedule 29.08.2015


Ответы (1)


Взглянув на раскадровку в проекте, я обнаружил, что проблема была связана с дополнительными навигационными контроллерами после каждого перехода Push. То есть, помимо начального (корневого) навигационного контроллера, раскадровка содержала UINavigationController в качестве пункта назначения для проблемных переходов Push. Удаление этих дополнительных навигационных контроллеров (но сохранение корневого навигационного контроллера) решило проблему.

person ndmeiri    schedule 23.06.2015
comment
Я столкнулся с тем же сообщением об ошибке консоли, но обратите внимание на следующее: переходы к контроллерам навигации должны оставаться из-за их использования с контроллером разделенного представления (к контроллеру подробного представления); (и как следствие) код не требует раскручивания переходов (также код включает блоки для установки значений в родительском представлении); и сообщение об ошибке консоли было подавлено с помощью следующей строки кода в viewDidLoad... [self.searchController loadViewIfNeeded]; (примечание доступно из iOS 9). - person andrewbuilder; 14.03.2016