异步请求后在appdelegate中选择RootViewController

时间:2014-06-04 11:47:29

标签: ios objective-c asynchronous rootview

我试着解释我的问题。在appdelegate中,我必须根据异步请求的结果选择一个rootViewController(我使用AFNetworking框架)。事实上,我需要知道我的用户是否被分析:如果他被描述了我可以向他展示应用程序的主页,如果他不是,我必须向他展示一个浏览视图。

在storyboard中,我将Home视图设置为指定的入口点,但是这样一直显示此视图,直到异步请求完成。有没有办法使appdelegate等待响应?

4 个答案:

答案 0 :(得分:4)

我认为没有很好的解决方案让app delegate等待响应,因为如果网络连接不佳,应用程序加载时间会非常长,操作系统可能会杀死你的应用程序,或者用户可以将其关闭。

您可以添加一些加载视图控制器(带动画,因此用户将知道应用程序正在执行某些操作)而不是主页,当您收到响应时,向用户显示适当的视图(模态segue可以完成工作)。 希望这个帮助

答案 1 :(得分:3)

更好的解决方案是使用闪屏。这是你的应用程序在AppDelegate中加载,创建并推送一个启动视图控制器。其中只包含一个覆盖整个屏幕的UIImageView,显示您的应用程序启动图像。在异步调用完成后,弹出该视图控制器并按下所需的视图控制器。

许多应用程序使用这种方式在显示应用程序之前下载必要的异步数据。这样用户就不会看到空屏幕或垃圾数据。

如果某些内容失败,如互联网连接失败或服务器响应错误等,请向用户显示错误并根据您的应用逻辑执行错误处理。

答案 2 :(得分:0)

您可以以编程方式导航到根视图控制器

[self.navigationController popToRootViewControllerAnimated:YES];

此代码可以置于结果状态。

或者以你的方式,我认为你创建了一个用于导航到rootViewController的segue。您可以使用

以编程方式执行segue
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender

答案 3 :(得分:0)

如果您正在使用AFNetworking,只需在成功块中添加一个方法,并将响应传递给字典参数中的该方法。检查方法中的响应,然后从该方法中选择要制作根控制器的控制器。