Nas*_*ash 10 ios uistoryboardsegue swift xcode6-beta7
我刚刚安装了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...
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将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...
}
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序中的所有其他segue似乎工作正常,但这一个是失败的 - 并且它似乎仅在发布展开的情况下发生.还有其他人遇到过吗?
编辑/解决方法
一个简单的解决方法是避免使用unwindSegue方法并简单地调用dismissViewControllerAnimated
,但我仍然想知道为什么unwindSegue方法在这个实例中失败...
非常感谢!
Mat*_*uch 14
正如Matt Gibson想出的那样,添加和删除segue标识符可以解决问题.
该错误的原因是默认情况下Xcode不会为展开segues添加标识符.
故事板中的默认展开segue如下所示:
<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/>
Run Code Online (Sandbox Code Playgroud)
在Objective-C中,这不是问题,segue.identifier
将是零.在Swift identifier
中声明String
为非可选字符串.但是故事板中的标识符仍然是零,因此SDK返回nil,它表示它确实返回了一个非可选字符串.这在运行时崩溃了.
更改并删除故事板中的标识符后""
,标识符将为空字符串.
<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/>
Run Code Online (Sandbox Code Playgroud)
这当然解决了这个问题,因为空字符串匹配identifier
getter 的指定返回值.
我为此提出了一个雷达.你应该在Apples Bug Reporter中加入它
归档时间: |
|
查看次数: |
1511 次 |
最近记录: |