В UIViewController (rolePageController) я настраиваю другой UIViewController (pocketController) и передаю ему 2 UIViews со страницы ролей, которая будет частью конфигурации кейдконтроллера.Как только ящик контроллера пытается получить доступ к представлениям IBOutlet из rolePageController, он завершается с EXC_BAD_ACCESS (code = EXC_I386_GPFLT).
В 1-ом VC (rolePageController) есть следующие IBOutlets:
@IBOutlet var rolePageDrawerView: UIView!
@IBOutlet var rolePageContentView: UIView!
В rolePageController.viewDidLoad () я выполняю вызов к ящику bottomController.configureDrawer (...):
override func viewDidLoad() {
super.viewDidLoad()
//other stuff happens here
let drawerController = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewController(withIdentifier: "drawerController") as! DrawerViewController
drawerController.configureDrawer(drawerContainerView: self.rolePageDrawerView, overlaidView: self.rolePageContentView)
//other stuff here
}
Протокол DrawerViewController определяется как:
protocol DrawerViewController where Self: UIViewController {
func configureDrawer(drawerContainerView: UIView, overlaidView: UIView)
}
Вот код для функции configureDrawer (...):
private var drawerParentView: UIView!
private var overlaidByDrawerView: UIView!
func configureDrawer(drawerContainerView: UIView, overlaidView: UIView) {
self.drawerParentView = drawerContainerView
self.overlaidByDrawerView = overlaidView
}
Замечено вотладчик, что вызываемый экземпляр boxController не соответствует собственному экземпляру, который получает вызов.Вот адрес экземпляра, который будет вызываться:
![enter image description here](https://i.stack.imgur.com/783DD.png)
Вот адрес экземпляра, когда я вступаю в вызов:
![enter image description here](https://i.stack.imgur.com/CXLFJ.png)
Когда я вхожу в вызов, адрес ящика контроллера перед вызовом не является адресом самого себя.Этого никогда не должно быть.
Я создал упрощенный проект, который воспроизводит сбой в https://github.com/ksoftllc/DynamicStackBufferOverflow.
Решение Решение оказалось для удаления предложения where изПротокол DrawerViewController.
protocol DrawerViewController where Self: UIViewController {
func configureDrawer(drawerContainerView: UIView, overlaidView: UIView)
}