Iphone 加载背景数据并启动图像

Iphone 加载背景数据并启动图像,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我已经阅读了苹果公司的指南,我知道它说你不应该这样做,但请听我说,因为我想知道我所做的是不是不好的做法 当我的应用程序加载时,在app委托中,会进行一次web调用,设置选项卡的顺序以及其中的内容。网络电话是这样的 WebCalls *wc = [[WebCalls alloc] init]; [wc setWebCallDidFinish:^(NSString * json) { // set up tab order here, as well as stores the JS

我已经阅读了苹果公司的指南,我知道它说你不应该这样做,但请听我说,因为我想知道我所做的是不是不好的做法

当我的应用程序加载时,在app委托中,会进行一次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];
现在这段代码工作得很好,但问题是当应用程序启动时会发生什么

  • 启动图像显示一秒钟(不是很长,有时是半秒钟或更短,所以很烦人)
  • 在解析json和下载图像等过程中,屏幕变黑约2秒
  • 然后显示第一个选项卡控制器
  • 我想要的是启动屏幕和第一个屏幕之间的无缝过渡,这样用户就不会看到黑屏

    我想做的是这样的事情

    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];
    

    在给出的答案中,这个家伙向前推一个视图作为初始屏幕。将该视图向前推,然后在该屏幕中执行获取json数据并下载图像的web调用,然后关闭该视图并使tabcontroller视图成为主视图,这是一种糟糕的做法吗

    或者我该如何防止这种延误?在AppDelegate中有这样一个足够大的web调用是一种不好的做法吗

    如果在后台加载时向前推视图是一种不好的做法,那么您还有什么建议?如果我先将tabController设置为主rootViewController,然后在显示的第一个选项卡中执行webCall,然后在这个web调用完成时更新这些选项卡,会更好吗?我正在考虑这个,但是在web调用完成后,选项卡顺序可以是任意顺序,所以不确定首先显示哪个选项卡

    非常感谢您的意见

    在给出的答案中,这个家伙向前推一个视图作为初始屏幕。将该视图向前推,然后在该屏幕中执行获取json数据并下载图像的web调用,然后关闭该视图并使tabcontroller视图成为主视图,这是一种糟糕的做法吗

    这是做这件事的方法。从ApplicationIDFinishLaunching下载内容通常是不好的做法,如果手机未连接到internet,会发生什么情况


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

    苹果公司也同意这种技术吗?我只是想在开始编码之前确认一下,因为我读了很多关于这方面的不同意见,并且有点困惑,因为有些人说是,其他人说不是,所以不确定是,只要你在后台加载und(即,不要冻结主线程)并显示适当的错误消息,他们应该对此没有问题。大量应用程序使用了这种技术。