xcode6 beta7 prepareForSegue 抛出 EXC_BAD_ACCESS
Posted
技术标签:
【中文标题】xcode6 beta7 prepareForSegue 抛出 EXC_BAD_ACCESS【英文标题】:xcode6 beta7 prepareForSegue throws EXC_BAD_ACCESS 【发布时间】:2014-09-05 08:17:09 【问题描述】:我刚刚安装了 XCode6 Beta-7,现在我的一个 PrepareForSegue 方法出现访问异常 - (当模态 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...
应用程序中的所有其他 segues 似乎都可以正常工作,但是这个失败了 - 它似乎仅在发出 unwind 的情况下发生。其他人遇到过这个吗?
编辑/解决方法
一个简单的解决方法是避免使用 unwindSegue 方法并简单地调用 dismissViewControllerAnimated
,但我仍然很想知道为什么 unwindSegue 方法在这种情况下会失败......
非常感谢!
【问题讨论】:
想一想:升级到 Beta 7 后您是否清理了构建文件夹? 嗯.. 清洁也没有运气。 (不过提醒一下 - 这也让我发现了一些过去的测试版 :)) 我在使用 segue 时遇到了类似的问题。试试这个:对于 Interface Builder 中你得到的每个 没有 标识符的 segue,输入一些东西,删除它,然后点击返回。然后重建并重试。我在之前的测试版中添加了一个没有标识符的 segue,这就是导致问题的原因。通过在最新的 Xcode 中强制将其重新设置为无标识符 again,我想我在 xib 中更改了一些需要与最新 beta 中的某些运行时代码完全匹配的内容。 谢谢@MattGibson - 尝试了你的建议,但仍然没有运气......我会尝试用一个测试项目重新创建问题,看看是否能解决它。 我在 Xcode 6 GM 版本中仍然看到同样的问题 - @MattGibson 你的方法似乎对我有用! 【参考方案1】:Matt Gibson 发现添加和删除 segue 标识符可以解决问题。
这个bug的原因是Xcode默认没有为展开segues添加标识符。
情节提要中的默认展开转场如下所示:
<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/>
在 Objective-C 中这不是问题,segue.identifier
将为零。在 Swift 中,identifier
被声明为 String
,一个非可选字符串。但是故事板中的标识符仍然是 nil,所以 SDK 在它表示它确实返回一个非可选字符串的地方返回 nil。这会在运行时崩溃。
一旦您更改并删除了故事板中的标识符,该标识符将是 ""
,一个空字符串。
<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/>
这当然解决了问题,因为空字符串匹配identifier
getter 的指定返回值。
我为此提交了radar。你应该在Apples Bug Reporter中欺骗它
【讨论】:
酷,很高兴我指出了正确的方向。感谢您深入了解幕后发生的事情。 补充一点,我使用的 segue 不是问题,因为它定义了一个标识符。我的问题是情节提要中的另一个 segue 没有标识符。以上是关于xcode6 beta7 prepareForSegue 抛出 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章
Xcode5.1.1 and Xcode6 beta7 iOS7.1 64-bit [Allocator] Allocator invalid, fall back to malloc
Swift beta7 中的 NSString.sizeWithAttributes()
将 Xcode 6 beta 6 更新到 beta 7 后出现“可选错误”
XCode 6 Beta 6 Beta 7 中的错误 - 可选类型的值未解包