2014-09-05 54 views
9

我刚刚安装XCode6β-7,我现在看到的我PrepareForSegue方法之一访问异常 - (被称为当一个模态Segue公司即将放松)xcode6β7的prepareForSegue抛出EXC_BAD_ACCESS

有问题的代码看起来是这样的:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 


    if (segue.identifier == "MY_IDENTIFIER") { //EXC_BAD_ACCESS (code=1, address=0x0) 
     //Never gets here... 
    } 


} 

我试图使SEGUE参数可选,但至于斯威夫特而言,segue不是零,所以即使像下面的一张支票,我也有同样的故障.. 。

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) { 

    if (segue != nil) 
     if (segue!.identifier == "MY_IDENTIFIER") { //EXC_BAD_ACCESS (code=1, address=0x0) 
      //Never gets here... 
     } 
    } 


} 

应用程序中的所有其他应用程序似乎都能正常工作,但这一切都失败了 - 而且这种情况似乎只发生在展开的情况下。其他人遇到过这个?

编辑/解决方法

一个简单的解决方法是避免使用unwindSegue方法和简单的调用dismissViewControllerAnimated,但我仍然希望知道为什么unwindSegue方法在这种情况下失败...

非常感谢!

+0

只是一个念头:升级到Beta 7后,你有没有清理你的生成文件夹? – zisoft 2014-09-05 08:37:10

+0

嗯..没有运气与清洁。 (不过很好的提醒 - 这让我知道了一些过去的betas :)) – Nash 2014-09-05 08:45:03

+3

我有一个与segue类似的问题。试试这个:对于界面构建器中的每一个阶段,你都有*没有标识符,键入内容,删除它,然后点击返回。然后重建并再次尝试。我有一个没有标识符的segue,我在之前的测试版中添加了这个标识符,而这正是导致问题的原因。通过强制它在最新的Xcode中重新设置为no * *,我想我改变了xib中需要与最新测试版中的某些运行时代码完全匹配的内容。 – 2014-09-05 13:28:46

回答

14

正如Matt Gibson计算出的,添加和删除segue标识符可以修复问题。

该错误的原因是Xcode默认情况下不会为unwind segues添加标识符。

至情节板中的默认的展开赛格瑞看起来是这样的:

<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/> 

在Objective-C,这不是一个问题,segue.identifier将是零。在Swift中identifier被声明为String,一个非可选字符串。但故事板中的标识符仍然为零,所以SDK返回nil,它表示它返回非可选字符串。这在运行时崩溃。

更改并删除故事板中的标识符后,标识将为"",一个空字符串。

<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/> 

这当然解决了这个问题,因为一个空字符串identifier吸气指定的返回值匹配。

我为此提交了radar。你应该尝试在Apples Bug Reporter

+0

很酷,很高兴我指着正确的方向。感谢您深入了解幕后发生的事情。 – 2014-09-15 15:37:42

+0

为了补充说明,我使用的segue不是问题,因为它有一个标识符定义。我的问题是storyboard中的另一个segue没有标识符。 – 2014-10-08 16:20:51

相关问题