在UIProgressView上添加NSURLConnection加载过程

时间:2010-11-23 10:51:20

标签: ios nsurlconnection uiprogressview

我创建了一个UIProgressView。但我使用了NSTimerUIProgressView's进程。现在,我需要在加载URL时集成UIProgressView进程。 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 个答案:

答案 0 :(得分:15)

在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];
 }