我刚刚意识到,在当前的
Xcode 8 beta 6中,当我将一个展开动作连接到例如模态呈现的视图控制器中的条形按钮项目以展开模态呈现segue并将视图控制器呈现在导航堆栈中之前,Xcode在可用于此目的的现有@IBActions的名称中添加了“WithSegue” – 并且这打破了unwind segue(它将不会被执行).如果我在源代码中编辑storyboard文件(作为XML),并从@IBAction方法标识符中删除此“WithSegue”,则segue按预期工作.例如,我在原始视图控制器中的unwind方法(unwind segue的目标)称为“unwindFromSettingsToTableView” – 当我按CTRL连接模式呈现的栏按钮项时,Xcode / Interface Builder将此方法重命名为“unwindFromSettingsToTableViewWithSegue”将控制器视图到场景底座中的视图控制器的退出项.
这是Xcode 8 beta中的错误吗?这是一个已知的bug吗?我错过了什么吗?
我检查了我以前连接的展开segues(在Xcode 7中连接),并且他们没有这个“WithSegue”后缀.如果我删除那些现有的“vintage”展开segues,并在Xcode 8中再次连接它们,Interface Builder现在建议使用带有“WithSegue”后缀的相同方法名称 – 这些segues会中断.当我在storyboard源代码中删除后缀时,unwind segue再次起作用.
得到任何迹象都会很棒.这种行为很烦人.
最好的祝愿!
比约恩
解决方法
在
Swift 3中,如果您不希望它添加WithSegue,请定义您的@IBAction方法以不命名第一个参数:
@IBAction func unwindHome(_ segue: UIStoryboardSegue) { // this is intentionally blank }
如果您不使用该_语法,当它连接@IBAction时,它会将WithSegue添加到名称中.
当我将上述语法用于我的展开动作时,它在Xcode 8,beta 6中运行良好.
顺便说一句,当我不在beta 6中使用上面显示的_语法时,它将动作命名为unwindHomeWithSegue但它仍然可以使用更长的名称,而不需要编辑故事板XML.我想知道你的无功能解开是否是其他问题的结果.我们需要一个可重复的问题示例来进一步诊断.也许你可以分享一个MCVE.