Как отслеживать ход загрузки с помощью ASIHTTPRequest (ASYNC) - PullRequest
4 голосов
/ 12 июня 2011

В настоящее время я использую асинхронный вызов моего API (я настраиваю) на моем сайте.Я использую setDownloadProgressDelegate ASIHTTPRequest с UIProgressView.Однако я не знаю, как я могу вызвать селектор (updateProgress), который установит для CGFloat «progress» для прогресса progressView.Я попробовал следующее, но оба прогресса были равны нулю.Пожалуйста, вы можете сказать мне, как я могу заставить это работать?

(in some method)

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[url stringByAppendingFormat:@"confidential"]]];
    [request setDownloadProgressDelegate:progressView];
    [NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f target:self selector:@selector(updateProgress:) userInfo:nil repeats:YES];
    [request setCompletionBlock:^{~100 lines of code}];
    [request setFailedBlock:^{~2 lines of code :) }];
    [request startAsynchronous];

- (void) updateProgress:(NSTimer *)timer {
    if (progressView.progress < 1.0) {
        currentProgress = progressView.progress;
        NSLog(@"currProg: %f --- progressViewProg: %f", currentProgress, progressView.progress);
    }
    else {
        [timer invalidate];
    }
    return;
}

Ответы [ 3 ]

7 голосов
/ 13 июня 2011

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

Один из способов добиться того, что вы хотите, - установить downloadProgressDelegate быть вашим собственным классом и реализовать setProgress:.В этой реализации обновите переменную прогресса и затем вызовите [progressView setProgress:];

Или в коде настройте делегат прогресса загрузки запроса:

[request setDownloadProgressDelegate:self];

, а затем добавьте метод в свой класс:

- (void)setProgress:(float)progress
{
    currentProgress = progress;
    [progressView setProgress:progress];
}
4 голосов
/ 12 июня 2011

Попробуйте добавить в свой запрос:

[request setShowAccurateProgress:YES];

Это не поможет вам позвонить updateProgress, ASIHTTPRequest изменит сам индикатор прогресса.

0 голосов
/ 12 июня 2011

КСТАТИ: NS * При загрузке содержимого подключение выглядит немного быстрее, чем ASI *.

В любом случае, пример на этой странице подразумеваетчто вам не нужно вручную «копировать» значение из объекта загрузки в объект представления прогресса.

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

...