Ios 从超控器中释放分段

Ios 从超控器中释放分段,ios,segue,uipopovercontroller,unwind-segue,responder-chain,Ios,Segue,Uipopovercontroller,Unwind Segue,Responder Chain,我从UIStoryboard加载了UIViewController,通过发送initialViewController(它不是我应用程序的主情节提要) 我在故事板上用了一段放松的片段。其退出点位于主UIStoryboard的场景中的UIViewController的展开动作中 我用代码显示这个视图控制器,而不是用segue 如果我使用presentViewController:animated:completion:呈现加载的视图控制器,则展开序列工作正常并找到适当的处理程序 但是,如果我在UI

我从
UIStoryboard
加载了
UIViewController
,通过发送
initialViewController
(它不是我应用程序的主情节提要)

我在故事板上用了一段放松的片段。其退出点位于主
UIStoryboard
的场景中的
UIViewController
的展开动作中

我用代码显示这个视图控制器,而不是用segue

如果我使用
presentViewController:animated:completion:
呈现加载的视图控制器,则展开序列工作正常并找到适当的处理程序

但是,如果我在
UIPopoverController
中包装显示的视图控制器,然后显示popover,则展开序列不起作用。我可以中断展开操作,但它不会被调用

在他们的文章中,Apple介绍了查找目标视图控制器的过程

展开序列如何确定其目标视图控制器 启动展开序列时,它必须首先在导航层次结构中找到最近的视图控制器,该视图控制器执行创建展开序列时指定的展开操作。此视图控制器成为展开序列的目标。如果未找到合适的视图控制器,则会中止展开过程

从启动展开序列的视图控制器开始,搜索顺序如下:

  • 响应程序链中的下一个视图控制器将发送一条
    viewControllerForUnwindSegueAction:fromViewController:withSender:
    消息。对于以模式显示的视图控制器,这将是调用
    presentViewController:animated:completion:
    的视图控制器。否则,
    parentViewController
    。 默认实现搜索接收者的
    childViewControllers
    数组,以查找要处理展开操作的视图控制器。如果接收方的子视图控制器都不希望处理展开操作,则接收方会检查是否希望处理展开操作,如果需要,则返回self。在这两种情况下,
    可以执行WindSegueAction:fromViewController:withSender:
    方法用于确定给定的视图控制器是否要处理展开操作

  • 如果没有从
    viewControllerForUnwindSegueAction:fromViewController:withSender:
    返回任何视图控制器,则将从响应器链中的下一个视图控制器重复搜索

  • (请注意我强调的第二点。)

    所以,就我所知,我所做的应该只是工作。展开序列将弹出响应器链,从显示的视图控制器中,进入到
    UIPopoverController
    中,进入到显示它的任何对象,并在链的上游–最终找到我的展开处理程序


    但它不起作用。有什么想法吗

    在进行一些挖掘时,如果我在使用模式视图或popover时从呈现视图控制器中的第一响应者发送一条操作消息,则呈现视图控制器不会获得该操作(请记住,展开分段正在使用模式呈现视图控制器)。因此,我不确定苹果是否在用通常的发现机制来指响应者链。