【问题标题】:Xcode 8 beta 6 unwind segue seems broken because "WithSegue" is added to @IBAction unwind method name automaticallyXcode 8 beta 6 unwind segue 似乎坏了,因为“WithSegue”自动添加到@IBAction unwind 方法名称
【发布时间】:2016-12-28 02:40:38
【问题描述】:

我刚刚意识到,在当前的 Xcode 8 beta 6 中,当我将展开操作连接到例如模态呈现的视图控制器中的条形按钮项以展开模态呈现 segue 并呈现之前的视图控制器时在导航堆栈中,Xcode 将“WithSegue”添加到可用于此目的的现有 @IBActions 的名称中 - 这会破坏展开 segue(它不会被执行)。如果我在源代码(作为 XML)中编辑情节提要文件,并从 @IBAction 方法标识符中删除此“WithSegue”,则 segue 按预期工作。例如,我在原始视图控制器(展开 segue 的目标)中的展开方法称为“unwindFromSettingsToTableView”-当我 CTRL 连接模态显示中的条形按钮项时,Xcode/Interface Builder 将此方法重命名为“unwindFromSettingsToTableViewWithSegue”视图控制器到场景停靠栏中视图控制器的退出项。

这是 Xcode 8 beta 中的错误吗?这是一个已知的错误吗?我错过了什么吗?

我检查了我之前连接的 unwind segues(在 Xcode 7 中连接),它们没有这个“WithSegue”后缀。如果我删除那些现有的“老式”展开转场,并在 Xcode 8 中再次连接它们,Interface Builder 现在建议使用带有“WithSegue”后缀的相同方法名称 - 并且这些转场会中断。当我删除故事板源代码中的后缀时,展开转场再次起作用。

如果能得到任何迹象,那就太好了。这种行为很烦人。

祝你好运! 比约恩

【问题讨论】:

  • 也许你可以用unwindFromSettingsToTableView是如何声明的例子来更新问题(例如,你是否使用_和参数名称?)。此外,您可能想尝试重现您在新测试项目中描述的这种行为,因为我无法重现您在 beta 6 中描述的行为。让我们确保您当前的项目没有问题。
  • "这是 Xcode 8 beta 中的错误" 不,不是。

标签: ios xcode storyboard interface-builder


【解决方案1】:

这个问题在 Xcode 8.0 的发布版本中仍然存在,而不仅仅是 beta 版本。

我在展开转场中注意到的是后缀是 "WithUnwindSegue" 而不是 "WithSegue"

我也在使用 swift 2.3 项目并创建了一个 unwind segue。与上述类似,在情节提要上,修复方法是删除 segue 属性检查器的 Action 属性(字段)中的 WithUnwindSegue 后缀。

【讨论】:

    【解决方案2】:

    我遇到了与 OP 相同的问题,在 xcode 8 beta 6 中使用 swift 2.3。

    This post using ios 8 解释了如何以编程方式展开 segue。并在第三步中选择 Document Outline 中的 unwind segue。

    选择此项并将右上角的unwindToSecondVCWithSegue 更改为unwindToSecondVC,使其与代码匹配解决了我的问题。

    @IBAction func unwindToSecondVC (segue: UIStoryboardSegue) {
        print("unwindToSecondVC")
    }
    

    【讨论】:

    • 嗨!谢谢 - 这就是我所做的。我对 Xcode 和所有这些业务仍然很陌生——我认为随着底层框架或编程语言 (Swift) 的每一次变化,即在 WWDC 之后的几个月里,每年都会出现类似的这种“奇怪”行为。 :-D 谢谢!
    • 欢迎您。是的,swift 3 是一个移动的目标。每当有新的测试版出现时,我都会尝试将代码更新到这个版本。在 beta 6 中,我将其重构为版本。 2.3. FB 和 AWS 开发工具包的大多数示例都是针对版本的。 2 我会等到 swift 3 出来一段时间后再迁移。 :-)
    【解决方案3】:

    在 Swift 3 中,如果您不希望它添加 WithSegue,请将您的 @IBAction 方法定义为不命名第一个参数:

    @IBAction func unwindHome(_ segue: UIStoryboardSegue) {
        // this is intentionally blank
    }
    

    如果您不使用_ 语法,当它连接@IBAction 时,它会将WithSegue 添加到名称中。

    当我将上述语法用于我的展开操作时,它在 Xcode 8 beta 6 中运行良好。

    顺便说一句,当我不使用上面 beta 6 中显示的 _ 语法时,它会将动作命名为 unwindHomeWithSegue,但它仍然可以使用更长的名称,无需编辑情节提要 XML。我想知道您无法正常工作的 unwind segue 是否是其他问题的结果。我们需要一个可重现的问题示例来进一步诊断。也许你可以分享一个MCVE

    【讨论】:

    • 嗨,Rob - 亲爱的大家,感谢您的回复 - 非常有帮助!我意识到我应该提到我仍然在 Swift 2.3 和那个项目中(尽管在 Xcode 8 中,如前所述) - 这似乎是我最初问题的根源:在 Swift 2.3 中,我们仍然有“旧”方法命名约定(初始方法参数不需要下划线来明确表示在调用中使用时不应命名)。我创建了一个快速的新项目,使用 Rob 建议的方法名称,现在它可以正常工作了。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多