How to integrate NSURLConnection with UIProgressView?
Not sure what I'm missing here, but your filesize
being -1 seems to be your problem. The API docs clearly state that expectedContentLength
may not be available and that NSURLResponseUnknownLength
is returned in these cases. NSURLResponseUnknownLength
is defined as:
#define NSURLResponseUnknownLength ((long long)-1)
In these cases, you cannot get an accurate progress. You'll need to handle this and display an indeterminate progress meter of some sort.
I think you are printing out the file size wrong. If self.filesize
is indeed an NSNumber
, you print it using the %@
format, because it is an object, not a primitive:
NSLog(@"filesize: %@", self.filesize);
By using the %d
, your are just printing the pointer value of self.filesize. To print out the actual long long value, use %lli
(%d
is only for 32-bit values):
NSLog(@"filesize: %lli", [self.filesize longLongValue]);
So your self.filesize is actually -1 and the division is correct.
In your code, filesize appears to be an NSNumber object (!). So
NSLog(@"filesize: %d", self.filesize);
and
NSLog(@"content-length: %d bytes", self.filesize);
will likely report something like the address (id) of that object (or something else). This is the
filesize: 4687472
you see. As pointed out by others, the file size returned by the response is indeed -1, i.e.,
NSURLResponseUnknownLength
i.e., the server did not return the file size.