Добавьте процесс загрузки NSURLConnection на UIProgressView - PullRequest
5 голосов
/ 23 ноября 2010

Я создал UIProgressView.Но я использовал NSTimer к UIProgressView's процессу.Теперь мне нужно интегрировать UIProgressView процесс при загрузке URL.Размер UIProgressView's зависит от данных NSURLConnection's.

Я использовал следующий код для NSURLConnection.

-(void)load {
    NSURL *myURL = [NSURL URLWithString:@"http://feeds.epicurious.com/newrecipes"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                                       timeoutInterval:60];

    [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    responseData = [[NSMutableData alloc] init];
}


-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    [connection release];

    UIAlertView *alert = [[UIAlertView alloc] init];
    [alert setTitle:@"Warning"];
    [alert setMessage:@"Network Connection Failed?"];
    [alert setDelegate:self];
    [alert addButtonWithTitle:@"Yes"];

    [alert show];
    [alert release];

    NSLog(@"Error");
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    responsetext = [[[NSString alloc] initWithData:responseData encoding: NSASCIIStringEncoding] autorelease];
}

1 Ответ

15 голосов
/ 23 ноября 2010

В вашей функции didReceiveResponse вы можете получить общий размер файла следующим образом: _totalFileSize = response.expectedContentLength;.

В вашей функции didReceiveData вы можете добавить к общему счетчику полученных байтов: _receivedDataBytes += [data length];

Теперь, чтобы установить индикатор выполнения на правильный размер, вы можете просто сделать: MyProgressBar.progress = _receivedDataBytes / (float)_totalFileSize

(либо в функции didReceiveData, либо где-то еще в вашем коде)

Не забудьте добавить переменные, содержащие количество байтов, в ваш класс!

Надеюсь, это поможет ..

РЕДАКТИРОВАТЬ: Вот, как вы могли бы реализовать делегатов для обновления прогресса просмотра

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    _totalFileSize = response.expectedContentLength;
    responseData = [[NSMutableData alloc] init];
}


-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
   _receivedDataBytes += [data length];
   MyProgressBar.progress = _receivedDataBytes / (float)_totalFileSize;
   [responseData appendData:data];
 }
...