Segue 准备好,但性能无一例外地失败

Posted

技术标签:

【中文标题】Segue 准备好,但性能无一例外地失败【英文标题】:Segue prepared but performance fails without exception 【发布时间】:2016-02-19 10:55:56 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

您是否已将 segue 连接到退出视图控制器 B 并从弹出窗口中选择控制器 A 的展开方法? 如果使用导航控制器,请尝试self.navigationController.performSegueWithIdentifier。一个想法。 我使用的是普通的 VC。 你看过这个:developer.apple.com/library/ios/technotes/tn2298/_index.html 我认为您遇到了架构/设计问题 【参考方案1】:

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

我必须向 vc B 添加以下内容,因为从视图 B 到 A 的展开选择了错误的“最近展开”。

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

现在,如果发送者是视图 C,segue 只会展开以视图 B 作为目的地。

【讨论】:

以上是关于Segue 准备好,但性能无一例外地失败的主要内容,如果未能解决你的问题,请参考以下文章

在 sqlite-jdbc 驱动(3.23 或 3.30)中,字符串过长更新失败,无一例外。但是在命令行和navicat下就可以了

@Transactional 仅针对少数例外传播事务

第二个“其他人失败时的例外”

KafkaStreams 无一例外地关闭

Flask 应用程序无一例外地引发 500 错误

如何在 .NET 中毫无例外地打印当前的堆栈跟踪?