【问题标题】:consuming web service during splash screen in swift在快速启动屏幕期间使用 Web 服务
【发布时间】:2015-07-31 09:07:37
【问题描述】:

我是 ios swift 新手,

如何在启动画面期间从 web 服务获取数据,

换句话说,我想让启动画面仍然出现,直到应用完成获取数据。

我尝试将 NSURLConnection.sendAsynchronousRequest 函数放在 appdelegate 中,但闪屏不等待 sendAsynchronousRequest 完成

【问题讨论】:

    标签: swift ios8 nsurlconnection splash-screen sendasynchronousrequest


    【解决方案1】:

    您可以在 Storyboard 中创建启动画面视图控制器并将其标记为初始视图控制器。为其分配一个自定义视图控制器,例如“SplashViewController.swift”。此视图控制器具有常用方法,例如 viewDidAppear,您可以在其中建立网络连接。完成后,您可以使用 segue 将应用程序定向到所需的视图控制器。

    【讨论】:

      【解决方案2】:

      我认为这不是一个好主意。例如:

      我的互联网连接非常糟糕,您的应用会在几秒钟内向我显示启动画面。所以我通常认为该应用程序会崩溃,或者其他什么。更好的方法是在 MainViewController 中执行此操作,并向用户显示 Spinner/Load Screen 或类似的东西。

      在 swift 中发出异步请求的一个好方法是使用(很棒的)扩展 Alamofire。尤其是当您刚接触 iOS Swift 时。

      https://github.com/Alamofire/Alamofire

      然后,在您的 ViewDidLoad 中提出您的请求(在这种情况下仍作为后台线程)

      let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
      dispatch_async(dispatch_get_global_queue(priority, 0)) {
      
      // load here spinner / load screen 
                  
      // alamofire request
      Alamofire.request(.POST, "http://www.test.com/service", parameters: ["foo": "bar"]).responseJSON { (req, res, json, error) in
        ....
      }
      

      【讨论】:

      • 感谢您的想法,但我想在启动画面期间获取一些数据。
      • 线程从不等待异步请求,这就是为什么你让它异步(这样 UI 在请求完成之前不会挂起)——这就是为什么你的启动画面不会等待你的响应。
      • 请解释为什么要在启动画面期间发出同步(在您的情况下)请求。您想在第一个 VieController 上向用户显示您服务中的一些内容吗?
      • 我想先检查一些数据,然后根据结果我想将用户重定向到特定的视图控制器
      • 为什么不在你的 MainViewController 中这样做呢?向用户显示加载屏幕,然后加载(使用您的响应)您的下一个 ViewController。当您在 SplashScreen 中执行此操作时,我没有看到任何优势(仅看到挂起/滞后的应用程序)
      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多