我的应用程序出现EXC_BAD_ACCESS错误,代码为EXC_I386_GPFLT时出现问题。我一直无法找到关于此的更多信息,因为我写的一行代码并没有被指向罪魁祸首。错误发生在
行class AppDelegate: UIResponder, UIApplicationDelegate {
我甚至没有写过。我还不确定当我写的任何内容都显示为不正确时,如何弄清楚什么是不良访问。
为了更加透彻地解决问题,
我有一个包含导航控制器的故事板,它有一个ViewController作为其根视图控制器。 ViewController有一个表视图,当选择一个单元格时,它会转移到另一个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的segue期间尝试访问委托 - &gt ; VC1,然后导致错误,因为委托现在为零。
这可能是问题吗?如果没有,任何可能存在问题的见解都将非常有用。
编辑:我在没有设置navigationController委托的情况下尝试了同一系列的事件,并没有遇到同样的问题。保持这样的唯一问题是我需要navigationController委托,所以我可以在VC3和VC2之间传递信息。
答案 0 :(得分:2)
当我从VC3执行segue回到VC2时,我发现当我将navigationController委托设置为nil时问题停止了。我认为问题是委托属性仍然引用VC3,但VC3不再存在,所以当navigationController尝试执行我实现的viewWillAppear方法时,它试图作为委托访问的对象不再存在
答案 1 :(得分:0)
我遇到了类似的问题,它在调用我的自定义segue的init方法时与CFString ...方法调用有关。我通过在StoryBoard Segue“Attributes Inspector”中设置am Identifier来修复问题,可能是我正在使用的xcode版本的错误(6.4)。