首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xcode6 beta7 prepareForSegue抛出EXC_BAD_ACCESS

xcode6 beta7 prepareForSegue抛出EXC_BAD_ACCESS
EN

Stack Overflow用户
提问于 2014-09-05 08:17:09
回答 1查看 1.5K关注 0票数 10

我刚刚安装了XCode6 Beta-7,现在正在我的PrepareForSegue方法上看到一个访问异常-(当Modal Segue即将展开时调用)

所讨论的代码如下:

代码语言:javascript
复制
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不是零,所以即使使用下面这样的检查,我也有相同的失败.

代码语言:javascript
复制
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方法在这个实例中失败……

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-14 23:35:20

正如马特吉布森所指出的那样,添加和删除segue标识符可以解决这个问题。

这个错误的原因是,在默认情况下,Xcode并没有添加一个用于展开segues的标识符。

故事板中的默认解压单元如下所示:

代码语言:javascript
复制
<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/>

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

一旦更改并删除了情节提要中的标识符,标识符将为"",为空字符串。

代码语言:javascript
复制
<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/>

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

我为此申请了一份radar。你应该用Apples Bug Reporter来骗它

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25681427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档