加载背景数据并启动图像

时间:2012-05-21 14:49:21

标签: iphone objective-c xcode

我已经阅读了苹果指南,我知道它说你不应该这样做,但是听我说,因为我想知道我在做什么是不好的做法。

当我的应用程序加载时,在应用程序委托中,进行Web调用,该调用设置选项卡的顺序以及其中的内容。网络电话就像这样

WebCalls *wc = [[WebCalls alloc] init];
[wc setWebCallDidFinish:^(NSString * json) {    
    // set up tab order here, as well as stores the JSON in a file on the phone
    // Also code here to download images and cache them on phone
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
}
[wc getData:phoneNumber];

现在这段代码效果很好,但问题是app启动时会发生什么

  1. 启动图像显示一秒钟(不是很长,有时候是半秒或更短,所以只是讨厌)
  2. 屏幕变黑约2秒,同时解析json并下载图像等
  3. 然后显示第一个标签控制器
  4. 我想要的是启动画面和第一个屏幕之间的无缝过渡,这样用户就不会看到黑屏。

    我想做的事情是这样的

    Change iPhone splash screen time

    在给出的答案中,该家伙向前推动视图成为闪屏。将该视图向前推,然后在该屏幕中执行获取json数据的Web调用并下载图像,然后关闭视图并使tabcontroller视图成为主视图是不好的做法?

    或者我还能如何防止这种延迟?在AppDelegate中有足够大的Web调用是不好的做法吗?

    如果在进行后台加载时向前推视图是不好的做法,那么您还推荐什么?如果我首先将tabController作为主要的rootViewController并在显示的第一个选项卡中执行webCall,然后在此Web调用完成时更新选项卡,那会更好吗?我正在考虑这个,但是在进行网络通话后,标签顺序可以是任何顺序,因此不确定首先显示哪个标签。

    非常感谢您的意见

1 个答案:

答案 0 :(得分:2)

  

在给出的答案中,该家伙向前推动视图成为闪屏。将该视图向前推,然后在该屏幕中执行获取json数据的Web调用并下载图像,然后关闭视图并使tabcontroller视图成为主视图是不好的做法?

这是做到这一点的方法。从applicationDidFinishLaunching下载东西通常是不好的做法,如果手机没有连接到互联网会怎样?

提出一个简单的视图控制器(使用带有UIActivityIndi​​cator的presentModalViewController:controller animated:NO和描述正在发生的事件的标签,然后在加载完成时将其关闭(或者它失败,只显示错误并拒绝访问应用程序)记住还要检查飞机模式并通知用户。