Updating progress bar for a download-- NSURLConnectionDataDelegate
didReceiveData gets only called once
I am trying to download small PDF files 1-2Mb maybe 5 Mb at most. I am
working on SelectionViewController.m class which has a UIProgressView
called progressBar and it also implements the NSURLConnectionDataDelegate
protocol.
The funny thing is that my progress bar goes from 0.0 to 1.0 suddenly. I
would like to increment this slowly so it looks nice.
Here is my code:
-(void)downloadPDFToMyDocumentsFrom:(NSString*) PDFUrl
filename:(NSString *) title {
NSURL *url = [[NSURL alloc] initWithString:PDFUrl];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
urlConnection = [[NSURLConnection alloc] initWithRequest:request
delegate:self startImmediately:YES];
NSLog(@"%@", self);
fileName = [title stringByAppendingPathExtension:@"pdf"];
filePath = [[SearchFeed pathToDocuments]
stringByAppendingPathComponent:fileName];
}
//handling incoming data
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData
*)recievedData{
if(self.data == nil)
{
self.data = [[NSMutableData alloc] initWithCapacity:2048];
}
[self.data appendData:recievedData];
NSNumber *resourceLength = [NSNumber
numberWithUnsignedInteger:[self.data length]];
float progress = [resourceLength floatValue] /[fileLength floatValue];
self.progressBar.progress = progress;
}
-(void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response{
long length = [response expectedContentLength];
fileLength = [NSNumber numberWithUnsignedInteger:length];
//lastProgress = 0.0;
//currentLength = 0.0;
NSLog(@"%f ------------------------------------------------------- is
the fileLength", [fileLength floatValue]);
}
//handling connection progress
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
//WRITE code to set the progress bar to 1.0
//self.progressBar.progress = 1.0;
// [fileStream close];
[self.data writeToFile:filePath atomically:YES];
//[listFileAtPath:self.filePath];
connection = nil;
NSLog(@"%f %f-------------------------------------------- Finished
Loading ", lastProgress, [fileLength floatValue]);
}
I have put some NSLog statements to help me debug and it seems like its
downloading all at once.
Here is the output of all the NSLog:
2013-09-05 20:30:04.856 Revista[63246:c07] <SelectionViewController:
0x7180000>
2013-09-05 20:30:04.859 Revista[63246:c07] 63561.000000
------------------------------------------------------- is the fileLength
2013-09-05 20:30:04.861 Revista[63246:c07] 0.000000
63561.000000-------------------------------------------- Finished Loading
Do you guys have any idea on how to make it download in pieces and make
the progress bar move smoothly?
No comments:
Post a Comment