1

Внутри запроса запроса AlamoFire Я пытаюсь обновить индикатор выполнения. Как так:Обновление UIProgressView очень медленно в вызове AlamoFire (async)

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

Это кажется медленнее, чем уведомление.

Я очень озадачен тем, почему это происходит, поскольку я говорю об этом в основной теме. Я также смущен, почему уведомление на самом деле немного быстрее.

ответ

4

Существует много способов сделать это в Аламофире. Вы можете использовать закрытие 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) 
} 
+0

Спасибо :) извините за поздний прием был в отпуске – Boid

+0

Не беспокойтесь ... рад, что это помогло! – cnoon