Ошибка при использовании раскрутки перехода с UISearchController

У меня есть контроллер навигации с UITableViewController.

Когда пользователь выбирает ячейку в TableViewController, она переходит к новому контроллеру представления с табличным представлением внутри. Затем пользователь выбирает ячейку, и данные передаются обратно через этап раскрутки.

Проблема в том, что я получаю эту ошибку при использовании панели поиска перед выбором ячейки. Вот что пишет консоль:

popToViewController:transition: called on <UINavigationController 0x7fc8ab856e00> while an existing transition or presentation is occurring; the navigation stack will not be updated.

Код из View Controller, который я разматываю из:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        let cell = tableView.cellForRow(at: indexPath) as! MonsterSpriteCell
        let monster = monsters[indexPath.row]
        selectedMonster = monster
        if isTeamBuilding {
            // **ERROR OCCURS HERE**
            performSegue(withIdentifier: "saveToTeamBuilderTableVC", sender: cell)
        } else {
            performSegue(withIdentifier: "showMonsterDetail", sender: self)
        }
    }

Вот ссылка на проект. Контроллер просмотра, с которого я раскручиваюсь, — это Контроллер просмотра просмотра. Контроллер представления, к которому я обращаюсь, — это TeamBuilderViewController https://github.com/emanleet/monsterpedia.

РЕДАКТИРОВАТЬ: я думаю, было бы уместно отметить, что переход разворачивается в TeamBuilderTableViewController, который является контроллером представления, который находится внутри контейнера как часть другого контроллера представления. Кто-нибудь знает, может ли это быть причиной того, что мой переход на раскрутку не работает?


person Eman Harout    schedule 12.10.2016    source источник


Ответы (2)


SearchController представляет пустой контроллер представления.
Если вы напечатаете presentedViewController в didSelectRow.., когда поиск активен, вы увидите контроллер представления.
это означает, что вы пытаетесь выполнить переход из текущей презентации. Вы должны отклонить SearchController перед выполнением каких-либо переходов или презентаций.

Также в этом случае вам не нужен SearchController, так как вы используете только SearchBar для фильтрации.
Вместо этого поместите SearchBar в tableViewHeaderView и используйте его делегат для выполнения фильтрации и вместо проверки того, isActive ли получить доступ к полный список по сравнению с отфильтрованными результатами, просто поместите весь массив в фильтр, когда текст очищается, и всегда получайте доступ к отфильтрованным результатам.

person Yariv Nissim    schedule 13.10.2016

Два шага: сначала отключите контроллер поиска, представленный контроллером представления, а затем сделайте свое дело.

yourSearchController.dismiss(animated: true, completion: { 
                self.performSegue(withIdentifier: "yourUnwindSegue", sender: self)
            })
person Juan Boero    schedule 25.08.2017