【问题标题】:UIViewController dismissViewControllerAnimated: completion: causes app to freezeUIViewControllerdismissViewControllerAnimated:完成:导致应用程序冻结
【发布时间】:2013-06-26 03:21:49
【问题描述】:

我在 iPad 上的设置是处理应用程序主要内容的 UISplitViewController。这被设置为 UIWindow 的 rootViewController。

当应用程序启动时,我会测试用户是否能够登录到 Web 服务。如果用户无法访问 Web 服务,则会向他们呈现一个 UIViewController 子类,该子类处理用户的身份验证。 UIViewController 子类通过调用以模态方式呈现: [splitViewController presentViewController:loginViewController animated:YES completion:nil];

当用户成功登录后,loginViewController 被调用: [splitViewController dismissViewControllerAnimated:YES completion:nil];

使用显示应用程序 (http://revealapp.com) 我可以看到 splitViewController 现在以模态方式呈现,而不是预期的那样。

由于 splitViewController 以模态方式呈现,它现在不接受来自用户的任何输入。

以前有没有人遇到过这种情况并且能够帮助我。

更新:

问题看起来与尝试登录时出现的 UIAlertView 有关。这出现在用户点击“登录”和验证登录之间。有谁知道为什么/如何导致问题?要么 UIAlertView 没有被正确关闭,要么 LoginViewController 没有。

谢谢,

马特。

【问题讨论】:

  • 确保在主线程上关闭视图控制器。特别是因为您正在响应身份验证请求,如果您是通过回调方法执行的,您可能不会这样做,并且可能会导致各种奇怪的问题......
  • 在 dispatch_async(dispatch_get_main_thread(), ^{});块。
  • 视图被关闭,但控件没有返回给 splitViewController。
  • 哦,虽然我没有在第一条评论中提到它,但请确保您也在主线程上展示了 VC....
  • 啊,对不起,没用!

标签: ios uiviewcontroller uisplitviewcontroller


【解决方案1】:

我想你想要的是:

[loginViewController dismissViewControllerAnimated:YES completion:nil];

而不是

[splitViewController dismissViewControllerAnimated:YES completion:nil];

【讨论】:

  • 来自苹果关于 UIViewController 和dismissViewControllerAnimated 的文档:completion: -- 呈现视图控制器负责解除它呈现的视图控制器。如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发到呈现的视图控制器。
猜你喜欢
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2017-09-16
  • 2019-03-17
相关资源
最近更新 更多