如何阻止流程直到请求

时间:2015-10-22 07:56:59

标签: ios objective-c swift

我用Swift 2.0编写了一个小应用程序,它从远程服务器下载单个JSON数据(在AppDelegate文件中),并在多个选项卡视图中使用该数据。

我的问题是我想在应用程序启动时创建或阻止流程,直到下载JSON数据。

什么是最好的方法?我该怎么办?感谢。

mainClassName = 'package.MainClassName'

3 个答案:

答案 0 :(得分:1)

这取决于你所说的“流量”。在网络调用发生之前,您可以阻止用户与UIApplication.sharedApplication.beginIgnoringInteractionEvents()进行交互,并使用endIgnoringInteractionEvents()重新启用,但是如果不显示某些内容正在采取的某种视觉指示,那么这样做会非常恶意用户地方,就像一个活动指标。

您还需要考虑在无网络条件下您的用户(或应用商店评论员)会发生什么。您是否可以在应用中包含一组默认数据以用作后备?存储返回的最后数据?

答案 1 :(得分:0)

最好的方法是来做你想做的事。

您的应用有一组可用的数据。无论它是什么,您都会显示该组数据。然后启动异步请求。数据到达后,您可以更改应用程序可用的数据集,并刷新所有视图。

答案 2 :(得分:-1)

你可以使用Semaphore

  

调度信号量是传统计数信号量的有效实现。仅当需要阻止调用线程时,Dispatch信号量才会调用内核。如果调用信号量不需要阻塞,则不会进行内核调用。

这是代码

let semaphore = dispatch_semaphore_create(0)
 Alamofire.request(.GET, "...", parameters: nil)
    .responseJSON { response in
      data = JSON(response.result.value!)
     dispatch_semaphore_signal(semaphore)
  }
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)

注意:上面的代码会阻止你的主线程,直到它得到响应。阻塞主线程是最糟糕的情况。但是如果你没有任何选择,你也需要一些时间来满足你的要求你需要使用最糟糕的情况