我试图理解一个非常烦人的错误。我提前道歉:它可能难以重现。我只是希望有人偶然发现类似的情况,并且可以解决一些问题。
在我的Storyboard
中,我有两个UIViewController
A
和B
。我定义了从A
到B
的两个段,每个段都有不同的标识符(基于标识符,我设置B
不同)。
A
为例,以编程方式触发segues
performSegueWithIdentifier
A
[self dismissViewControllerAnimated:YES completion:^{
completionBlock();
}];
如果我触发第一个segue,然后在dismissViewControllerAnimated
的{{1}}触发另一个,我在解除第二个segue时会出现黑屏。好像有些错误的视图堆栈。另一方面,如果我触发第一个segue,然后(在完成块之外)我触发第二个,一切都很好。另外,如果我用标准模态替换我的自定义过渡一切都很好(但我检查并重新检查了我的自定义转换代码,它看起来正确)。
所以不知何故,当你completionBlock
时,看起来在完成块中事情并没有“准备好”。
知道发生了什么事吗?
答案 0 :(得分:1)
dismissViewControllerAnimated
完成块与viewWillAppear
大约同时发生。如果您尝试直接在任何performSegueWithIdentifer
方法中调用viewWillAppear
,您将获得类似(如果不相同)的结果。应该执行最早的segue作为viewDidAppear
中的第一行执行。完成块在viewDidAppear
之前触发(在任何地方放置NSLog
语句以验证订单)。