【问题标题】:Loading background data and launch image加载背景数据和启动图像
【发布时间】:2012-05-21 14:49:20
【问题描述】:

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

当我的应用程序加载时,在应用程序委托中,会进行网络调用,用于设置选项卡的顺序以及其中的内容。网络通话是这样的

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

现在这段代码运行良好,但问题是应用启动时会发生什么

  1. 启动图像显示一秒钟(不是很长,有时是半秒或更短,所以很烦人)
  2. 在解析 json 并下载图像等时,屏幕黑屏约 2 秒
  3. 然后显示第一个选项卡控制器

我想要的是在初始屏幕和第一个屏幕之间无缝过渡,这样用户就不会看到黑屏。

我想做的是这样的

Change iPhone splash screen time

在给出的答案中,这个人将一个视图向前推为启动屏幕。将视图向前推,然后在该屏幕中执行获取 json 数据并下载图像的网络调用,然后关闭视图并使 tabcontroller 视图成为主视图,这是不好的做法吗?

或者我还能如何防止这种延迟?在 AppDelegate 中像这样进行足够大的网络调用是不好的做法吗?

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

非常感谢您的意见

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案1】:

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

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

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

    【讨论】:

    • Apple 可以接受这种技术吗?只是想在开始编码之前得到一些确认,因为我阅读了很多关于此的不同意见,并且有点困惑,因为有些人说是,其他人说不,所以不确定
    • 是的,只要您在后台进行加载(即不要冻结主线程)并显示适当的错误消息,他们应该没有问题。大量应用程序都使用了这种技术。
    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2014-02-17
    • 2012-11-05
    • 2018-08-12
    相关资源
    最近更新 更多