У меня возникли проблемы при выполнении segueing в моем приложении с ошибками EXC_BAD_ACCESS, кода EXC_I386_GPFLT. Я не смог найти много информации об этом, так как нет строки кода, которую я написал, на которую указывают в качестве виновника. Ошибка возникает на линииEXC_BAD_ACCESS в объявлении класса AppDelegate
class AppDelegate: UIResponder, UIApplicationDelegate {
, которого я даже не написал. Я не уверен, как понять, что плохой доступ, когда ничего, что я написал, отображается как некорректный.
Чтобы поставить проблему в битовом более перспективный,
У меня есть раскадровка, который содержит навигационный контроллер, который имеет ViewController как его вид корневой контроллер. ViewController имеет представление таблицы, которое, когда ячейка выбрана, переходит к другому ViewController. Затем ViewController может перейти к третьему диспетчеру ViewControl через сегмент жесты нажатия. Этот третий контроллер делегат навигационный контроллер, и я поставил его в том, что внутри метода prepareForSegue 2-й ViewController, в
var dvc = segue.destinationViewController as BlockingViewController
self.navigationController!.delegate = dvc
Я столкнулся с этой проблемой при попытке отключить InteractivePopoverGestureRecognizer создается автоматически навигационным контроллером. Чтобы сделать это, я добавил к методам viewDidLoad 2-го и 3-го ViewControllers следующий код:
var barItem: UIBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressed")
self.navigationItem.leftBarButtonItem = barItem
и создал метод backButtonPressed:
func backButtonPressed() {
self.navigationController?.popViewControllerAnimated(true)
}
Ошибка возникает, когда я делаю следующую последовательность действия:
VC1 -> VC2 -> VC3 -> VC2 -> VC1
ошибка не происходит, когда я делаю следующую последовательность действий:
VC1 -> VC2 -> VC1
Так что должно быть что-то происходит в VC3, который вызывает проблему. Единственное, о чем я могу думать, это то, что я устанавливаю его как делегата диспетчера навигации, что заставляет меня задаться вопросом, возможно ли, что он пытается получить доступ к делегату во время segue из VC2 -> VC1, что вызывает ошибку, поскольку делегат теперь равен нулю.
Возможно, это проблема? Если нет, любое понимание того, что может быть проблемой, было бы чрезвычайно полезно.
EDIT: Я пробовал такую же серию событий, не задавая делегата navigationController, и не имел такой же проблемы. Единственная проблема с сохранением этого в том, что мне нужен делегат navigationController, поэтому я могу передавать информацию между VC3 и VC2, когда я перехожу между ними.