делегат раскрутки не деинитирует средний вид

У меня есть контроллер навигации (NC) и три ViewController (A, B, C) со следующим шаблоном навигации:

NC->A->B->C

Если я перейду от A к C и 'назад', будут вызваны оба метода deinit B и C.

Если я использую переход Unwind для перехода от C к A, deinit B не вызывается.

Непонятно, почему - у меня есть другая аналогичная последовательность в моем приложении, и деиниты вызываются независимо от операции «назад» или «раскрутки».

Любая идея, что может заставить B «остаться в живых» после операции раскрутки?


person zevij    schedule 27.06.2016    source источник
comment
Проверьте, нет ли у вас сильных эталонных циклов с этим контроллером. Любые повторяющиеся таймеры? Любые ссылки на не-weak делегатов? Любые свойства, которые являются замыканиями, которые ссылаются на self (но не указывают weak или unowned self)? И т.п.   -  person Rob    schedule 27.06.2016
comment
Проблемное представление — это простой UTTableViewController с SearchController. В viewWillDisappear я устанавливаю SearchController как active = false, searchResultsUpdater = nil и удаляю его из родительского представления. Замыканий нет. другие делегаты, которых я добавляю. Самое близкое, что я получаю, это назначить локальную ссылку на навигационный контроллер, но она возвращается к нулю, как только я закончу с ней.   -  person zevij    schedule 27.06.2016


Ответы (1)


Нашел проблему. Проблема в этой строке, которую я имел в viewDidLoad:

definesPresentationContext = true

Из документов: определяет, какое представление контроллера родительского представления должно быть представлено для презентаций типа UIModalPresentationCurrentContext. Если этот флаг не установлен ни для одного родительского контроллера представления, то презентатор будет корневым контроллером представления.

В результате средний вид (т. е. «B») становится корнем, если он не удаляется операцией «назад».

Чтобы окно поиска не отображалось в течение доли секунды в представлении C, я добавил searchController.active = false в prepareForSegue представления B после получения выбранного значения из выбора пользователя (нажмите на строку).

person zevij    schedule 27.06.2016