【发布时间】:2014-12-12 01:06:44
【问题描述】:
在我的应用程序中使用 EXC_BAD_ACCESS 错误(代码为 EXC_I386_GPFLT)时,我遇到了问题。我一直无法找到有关这方面的太多信息,因为我编写的任何代码都没有被指出是罪魁祸首。错误发生在行
class AppDelegate: UIResponder, UIApplicationDelegate {
我什至没有写。当我写的任何内容都显示为不正确时,我不确定如何确定什么是错误访问。
为了让问题更深入一点,
我有一个包含导航控制器的故事板,它有一个 ViewController 作为它的根视图控制器。 The ViewController has a table view that, when a cell is selected, segues to another ViewController.然后,该 ViewController 可以通过点击手势 segue 转到第三个 ViewController。第三个控制器是导航控制器的委托,我在第二个 ViewController 的 prepareForSegue 方法中设置它,
var dvc = segue.destinationViewController as BlockingViewController
self.navigationController!.delegate = dvc
我在尝试禁用由导航控制器自动创建的 InteractivePopoverGestureRecognizer 时遇到了这个问题。为此,我在第二个和第三个 ViewControllers 的 viewDidLoad 方法中添加了以下代码:
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 中一定发生了导致问题的原因。我唯一能想到的是我将它设置为导航控制器的委托,这让我想知道它是否可能在从 VC2 -> VC1 的转场期间尝试访问委托,这会导致错误,因为delegate 现在为零。
这可能是问题吗?如果没有,任何关于可能是什么问题的见解都会非常有帮助。
编辑:我在没有设置 navigationController 委托的情况下尝试了同一系列的事件,但没有遇到同样的问题。保持这种状态的唯一问题是我需要 navigationController 委托,这样当我在 VC3 和 VC2 之间进行切换时,我可以在它们之间传递信息。
【问题讨论】:
标签: ios iphone swift uiviewcontroller uinavigationcontroller