我刚刚安装了XCode6 Beta-7,现在正在我的PrepareForSegue方法上看到一个访问异常-(当Modal Segue即将展开时调用)
所讨论的代码如下:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "MY_IDENTIFIER") { //EXC_BAD_ACCESS (code=1, address=0x0)
//Never gets here...
}
}我试过将segue参数作为一个可选参数,但就Swift而言,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方法在这个实例中失败……
非常感谢!
发布于 2014-09-14 23:35:20
正如马特吉布森所指出的那样,添加和删除segue标识符可以解决这个问题。
这个错误的原因是,在默认情况下,Xcode并没有添加一个用于展开segues的标识符。
故事板中的默认解压单元如下所示:
<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/>在目标-C,这不是一个问题,segue.identifier将为零。在Swift中,identifier被声明为String,这是一个非可选字符串.但是在故事板中,标识符仍然是零,所以SDK返回nil,其中它说它确实返回一个非可选字符串。这会在运行时崩溃。
一旦更改并删除了情节提要中的标识符,标识符将为"",为空字符串。
<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/>这当然解决了这个问题,因为空字符串匹配identifier getter的指定返回值。
我为此申请了一份radar。你应该用Apples Bug Reporter来骗它
https://stackoverflow.com/questions/25681427
复制相似问题