AlamoFire(异步)调用中的 UIProgressView 进度更新非常慢
UIProgressView progress update very slow within AlamoFire (async) call
在 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 不会冻结(activity 指示器微调器继续运行)。
我还想指出,一旦应用程序遇到此代码,它就会继续执行它之后的代码,就好像它已被执行一样。然后它会在大约 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 下载请求监控进度。这同样适用于数据请求。
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)
}
在 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 不会冻结(activity 指示器微调器继续运行)。
我还想指出,一旦应用程序遇到此代码,它就会继续执行它之后的代码,就好像它已被执行一样。然后它会在大约 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 下载请求监控进度。这同样适用于数据请求。
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)
}