gpt4 book ai didi

ios - dismissViewControllerAnimated :completion: not executed

转载 作者:可可西里 更新时间:2023-11-01 03:56:07 32 4
gpt4 key购买 nike

当我调用 dismissViewControllerAnimated:completion: 关闭 UIViewController 时,当相应的 View 位于在屏幕上显示动画(使用 presentViewController:animated:completion:)。

UIViewController 甚至没有消失。这就像 dismissViewControllerAnimated:completion: 被忽略了。

以下代码是一个简化的代码示例,因为原始代码要大得多。我在下面给出的代码模拟了一个用例,其中网络通信错误可能会触发一个 View 弹出,而另一个 View 也同时弹出。

代码示例:

NSLog(@"Presenting view");

[self presentViewController:changeLocationViewController animated:YES completion:^{
NSLog(@"View done presenting");
}];

NSLog(@"Dismissing view");

[self dismissViewControllerAnimated:NO completion:^{
NSLog(@"View done dismissing");
}];

日志输出为:

2013-08-28 16:14:12.162 [1708:c07] Presenting view
2013-08-28 16:14:12.178 [1708:c07] Dismissing view
2013-08-28 16:14:12.583 [1708:c07] View done presenting


有谁知道如何在这些情况下关闭 UIViewController

提前致谢。

最佳答案

此代码片段不起作用的原因是这些方法中的完成 block 是在动画完成后的稍后时间执行的。您可以在日志中看到这一点:“关闭 View ”发生在“ View 完成呈现”之前。试试这个:

NSLog(@"Presenting view");

[self presentViewController:changeLocationViewController animated:YES completion:^{
NSLog(@"View done presenting");
NSLog(@"Dismissing view");

[self dismissViewControllerAnimated:NO completion:^{
NSLog(@"View done dismissing");
}];
}];

编辑:

如果您需要确保在发生网络错误时关闭 View ,请尝试设置一个名为 networkErrorFound 的 bool 实例变量。

完成网络连接后,如果发生错误,请将此设置为YES。然后使用这段代码:

[self presentViewController:changeLocationViewController animated:YES completion:^{
NSLog(@"View done presenting");
NSLog(@"Dismissing view");

if (self.networkErrorFound) {
[self dismissViewControllerAnimated:NO completion:^{
NSLog(@"View done dismissing");
}];
}
}];

这样一来,它会等到呈现完成后才关闭。您还需要处理动画完成后发生错误的情况(例如,最终失败的缓慢连接),但这超出了这个问题的范围。

关于ios - dismissViewControllerAnimated :completion: not executed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18490036/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com