swift - AlamoFire(异步)调用中的 UIProgressView 进度更新非常慢

标签 swift uiprogressview alamofire nsnotification dispatch-async

在 AlamoFire 获取请求中,我正在尝试更新我的进度条。像这样:

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)
})

这似乎比通知慢。

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

最佳答案

在 Alamofire 中有更好的方法可以做到这一点。您可以使用 progress 闭包在数据任务发生数据传输时自动获得回调。这是一个 example从 README 监控下载请求的进度。这同样适用于数据请求。

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)
}

关于swift - AlamoFire(异步)调用中的 UIProgressView 进度更新非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30385096/

相关文章:

iOS 13 为从 UIImagePickController 中选择的文件添加了 "trim."前缀

swift - 如何为可编码对象提供自定义代码功能

iOS/谷歌广告给出链接器代码失败

ios - 在 collectionviewcell 中动画化 View

iphone - 在 NSURLConnection 下载期间更新 iPhone UIProgressView

ios - 使用 Alamofire 获取 JSON 并解码 - Swift 4

ios - Alamofire post 请求返回 "<?xml version="1. 0"encoding="utf- 8"?>"

ios - 自 Pod 更新以来,Google map 相机目标位于 iOS map 的左上角

ios - 指定 API 请求的参数

ios - UIProgressView 没有更新,但标题是