Segue 已准备就绪,但性能无一例外地失败

Segue prepared but performance fails without exception

我有两个视图,A 和 B,它们之间有模态转场。 A 的控制器已定义 @IBAction func unwindSegue(segue: UIStoryboardSegue)

我正在尝试以编程方式执行展开转场(从视图 B 返回到 A),但失败但未产生任何错误。在视图 B 的控制器中,我调用了 performSegueWithIdentifier("unwind", sender: self) 并且可以看到调用了 func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 但之后没有任何反应。

我已经在 XCode 中为 unwind segue 指定了自定义名称,并且在视图 B 和 C 之间具有相同的设置(使用不同的名称以避免冲突),它们可以正常工作。

编辑: 展开由按钮或代码触发,按钮流工作正常。我很困惑,因为运行时可以识别 segue,否则它会抛出异常 - 那么是什么阻止了它 运行?我已经完成了 prepare 方法,没有任何阻塞。

编辑 2: 我注意到从按钮和通过代码触发视图 A 和 B 之间的 unwindSegue 之间的区别是目的地 VC。当通过按钮时,目的地是视图 A,但通过代码它是 C。为什么会发生这种情况?代码流是通过视图 C 触发的,其中有一个 return 按钮可以查看 A,并且只是一系列从堆栈中弹出视图的展开转场。

我可以通过按钮一次从每个视图向后展开一个,但是如果我按下按钮 return 从视图 C 或 D 查看 A 我展开到视图 B 然后会遇到以下问题目的地不正确,因此无法完成到视图 A 的遍历。

在这里找到答案https://spin.atomicobject.com/2015/04/23/unwind-segue-set-destination/ and How to unwind through multiple views without displaying intermediate views

我必须向 vc B 添加以下内容,因为从视图 B 展开到 A 时选择了错误的 'nearest unwind'。

override func canPerformUnwindSegueAction(action: Selector, fromViewController: UIViewController, withSender sender: AnyObject) -> Bool {
    return fromViewController is ViewC
}

现在如果发件人是视图 C,则 segue 只会展开以将 B 视为目的地。