Ошибка говорит вам, что вы пытаетесь заставить AdminPanelViewController
к ProductsViewController
(в topViewController as! ProductsViewController
части этой строки.) Это потому, что когда вы нажимаете на AdminPanelViewController, он перемещается в вершина стека навигации, предполагается, что замена ProductsViewController, который, как вы предполагаете, должен быть там.
Существует несколько способов справиться с этой ошибкой в краткосрочной перспективе, таких как итерация по стеку навигации вместо простого захвата topViewController, например:
guard let navController = self.tabBarController?.viewControllers![0] as? UINavigationController else {
// handle error
return
}
for controller in navController.viewControllers {
if let productsController = controller as? ProductsViewController {
// do work here
}
}
Но я думаю, что более фундаментально вам придется переосмыслить, как вы получаете доступ к вещам. В общем, вы не должны ходить по стеку навигации, чтобы делать работу. Вам лучше передавать данные между контроллерами во время навигации по стеку.
Кроме того, вам следует избегать принудительного приведения с помощью as!
и использовать вместо него as?
, что позволит вам обнаруживать случаи, когда приведение не работает без сбоя приложения. Моя личная цель - использовать только !
в декларациях IBOutlet и больше нигде, но ваш пробег может отличаться.