2014-12-12 2 views
2

У меня возникли проблемы при выполнении 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, когда я перехожу между ними.

ответ

1

Я обнаружил, что проблема остановилась, когда я вернул делегат navigationController обратно в ноль, когда выполнял переход из VC3 обратно в VC2. Я считаю, что проблема заключается в том, что свойство delegate по-прежнему ссылается на VC3, но VC3 больше не существует, поэтому, когда навигационный контроллер попытался выполнить метод viewWillAppear, который я реализовал, объект, к которому он пытался получить доступ, как делегированный, больше не существовал.

0

У меня была аналогичная проблема, она была связана с вызовом метода CFString ... при вызове метода init моего пользовательского segue. Я исправил проблему, установив am Identifier в StoryBoard Segue «Attributes Inspector», вероятно, ошибка с версией xcode, которую я использую (6.4).

Смежные вопросы