从dismissViewControllerAnimated的完成块调用的performSegueWithIdentifier导致黑屏

时间:2014-01-21 12:38:32

标签: ios objective-c

我试图理解一个非常烦人的错误。我提前道歉:它可能难以重现。我只是希望有人偶然发现类似的情况,并且可以解决一些问题。

在我的Storyboard中,我有两个UIViewController AB。我定义了从AB的两个段,每个段都有不同的标识符(基于标识符,我设置B不同)。

  • A为例,以编程方式触发segues performSegueWithIdentifier
  • segues使用自定义转换
  • 他们被A
  • 解雇

[self dismissViewControllerAnimated:YES completion:^{        
            completionBlock();
}];

如果我触发第一个segue,然后在dismissViewControllerAnimated的{​​{1}}触发另一个,我在解除第二个segue时会出现黑屏。好像有些错误的视图堆栈。另一方面,如果我触发第一个segue,然后(在完成块之外)我触发第二个,一切都很好。另外,如果我用标准模态替换我的自定义过渡一切都很好(但我检查并重新检查了我的自定义转换代码,它看起来正确)。

所以不知何故,当你completionBlock时,看起来在完成块中事情并没有“准备好”。

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

dismissViewControllerAnimated完成块与viewWillAppear大约同时发生。如果您尝试直接在任何performSegueWithIdentifer方法中调用viewWillAppear,您将获得类似(如果不相同)的结果。应该执行最早的segue作为viewDidAppear中的第一行执行。完成块在viewDidAppear之前触发(在任何地方放置NSLog语句以验证订单)。