我刚刚安装了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
它不是nil,因此即使进行如下所示的检查,我也有同样的失败...
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...
}
}
}
该应用程序中的所有其他segue似乎都可以正常工作,但是这一次失败了-并且似乎仅在发布解除锁定的情况下才发生。还有其他人遇到吗?
编辑/解决方法
一个简单的解决方法是避免使用unwindSegue方法,而只需调用dismissViewControllerAnimated
,但是我仍然很想知道为什么unwindSegue方法在这种情况下会失败...
非常感谢!
正如Matt Gibson指出的那样,添加和删除segue标识符可以解决此问题。
造成该错误的原因是,默认情况下,Xcode不会为展开的搜索添加标识符。
故事板上的默认展开顺序如下所示:
<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/>
在Objective-C中,这不是问题,segue.identifier
将是零。在Swiftidentifier
中,声明为String
,这是一个非可选字符串。但是标识符在情节提要中仍然为nil,因此SDK会在表示确实返回非可选字符串的地方返回nil。这在运行时崩溃。
更改并删除情节提要中的标识符后""
,标识符将为,一个空字符串。
<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/>
哪个当然可以解决问题,因为空字符串匹配identifier
getter的指定返回值。
我为此提起了雷达。您应该在Apple Bug Reporter中将其复制
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句