1

在AlamoFire中获取请求我试图更新我的进度条。像这样:在AlamoFire(异步)调用中非常缓慢的UIProgressView进度更新

alamofireManager.request(.GET, urlPath, parameters: params).responseJSON{(request,response,JSON,error) in 
    ...<code here>... 
    dispatch_async(dispatch_get_main_queue(), { 
     NSNotificationCenter.defaultCenter().postNotificationName(LoginVCHideSpinnerAndShowProgressBarName as String, object: self) 
    }) 
    ...<more code here>... 
} 

对于一些原因,这需要几秒钟来执行,如果我用dispatch_sync而不是应用程序似乎只是停留在这一点上获得,但(活动指示灯微调保持UI不冻结去)。 我还想指出,一旦应用程序点击此代码,它将继续执行后的代码,就好像它已被执行一样。然后在6秒后执行,就好像它没有在主线程中被调用一样。

我也只是简单地尝试这样做,而不是使用通知。

dispatch_async(dispatch_get_main_queue(), { 
    loginVC.progressBar.hidden = false 
    loginVC.indicator.hidden = true 
    loginVC.progressBar.setProgress(0.1, animated: true) 
}) 

这似乎比通知慢。

我很困惑,为什么会发生这种情况,因为我告诉它在主线程中更新。我也很困惑为什么通知实际上会更快一点。

回答

4

Alamofire有很多更好的方法来做到这一点。当您的数据任务发生数据传输时,您可以使用progress闭包自动获取回调。下载请求的自述文件监视进度是example。这同样适用于数据请求。

let progressView = UIProgressView(progressViewStyle: .Bar) 

let params = ["foo": "bar"] 
let URLString = "http://httpbin.org/get" 

let request = Alamofire.request(.GET, URLString, parameters: params) 
request.progress { _, _, _ in 
    progressView.setProgress(request.progress.fractionCompleted, animated: true) 
} 
request.responseJSON { request, response, json, error in 
    println(request) 
    println(response) 
    println(json) 
    println(error) 
} 
+0

谢谢:)对于迟到的接受度假抱歉是在度假 – Boid

+0

不用担心......很高兴帮助! – cnoon