如果过早调用 presentModalViewController 将不起作用
Posted
技术标签:
【中文标题】如果过早调用 presentModalViewController 将不起作用【英文标题】:presentModalViewController does not work if called too early 【发布时间】:2010-10-14 02:51:24 【问题描述】:如果我关闭模态 VC 并在不到一定时间内再次呈现它(或另一个),它不会出现。 我错过了什么吗?
【问题讨论】:
【参考方案1】:是的,你不能这样做。我假设你所做的是这样的:
[self dismissModalViewControllerAnimated:YES];
[self presentModalViewController:myNewController animated:YES];
这不起作用。我不知道确切原因,但它与我相信的动画有关。您的选择是在没有动画的情况下关闭第一个,或者等待在父级的 viewDidAppear 中显示新的(或者可能是前一个模式视图的 viewDidDisappear,但不确定这是否有效)。
【讨论】:
这不起作用的原因是视图控制器在动画完成时取消了它对模态vc的引用。因此它认为它不再有另一个视图控制器来模态呈现。您建议的两种解决方案都可以使用。 此处发布的答案对这两种方法有更多详细信息。 ***.com/questions/3919845/…【参考方案2】:你不能一个接一个地关闭两个模态视图控制器,除了另一个海报的建议之外,你可以等待一小段时间,然后再关闭另一个模态视图,例如
[self performSelector:@selector(method) withObject:nil afterDelay:.5];
调用的方法只是关闭您的其他模态视图。 代码的 sn-p 会在 0.5 秒后执行选择器,并且可以在遇到您描述的动画计时问题时使用,以分隔调用时间以便它们正确执行。
【讨论】:
这有点危险(不多),因为如果关闭动画的时间比您的延迟时间长,您的模态 vc 仍然不会出现。 (而且时间可能会随着操作系统的更新而改变。)Alex 的方法不受这个问题的影响。以上是关于如果过早调用 presentModalViewController 将不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何过早取消 RestKit 中的请求并调用“didFailWithError”