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

2023-12-21

在 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相反,应用程序似乎只是卡在了这一点,但用户界面并没有冻结(活动指示器旋转器继续运行)。 我还想指出,一旦应用程序点击此代码,它就会继续执行该代码之后的代码,就像它已被执行一样。然后大约 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 https://github.com/Alamofire/Alamofire#downloading-a-file-wprogress从自述文件监控下载请求的进度。这同样适用于数据请求。

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)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AlamoFire(异步)调用中 UIProgressView 进度更新非常慢 的相关文章

随机推荐