Я пытаюсь интегрировать объект NSURLConnection с UIProgressView, чтобы я мог обновить пользователя, пока загрузка файла происходит в фоновом режиме.
Я создал отдельный объект для загрузки файла в фоновом режиме, и у меня возникают проблемы с выяснением, как обновить свойство progress в объекте UIProgressView с правильным значением. Возможно, это что-то очень простое, но я не могу понять это с помощью Google.
Вот код, который у меня есть:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[self.resourceData setLength:0];
self.filesize = [NSNumber numberWithLongLong:[response expectedContentLength]];
NSLog(@"content-length: %d bytes", self.filesize);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.resourceData appendData:data];
NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[self.resourceData length]];
NSLog(@"resourceData length: %d", [resourceLength intValue]);
NSLog(@"filesize: %d", self.filesize);
NSLog(@"float filesize: %f", [self.filesize floatValue]);
progressView.progress = [resourceLength floatValue] / [self.filesize floatValue];
NSLog(@"progress: %f", [resourceLength floatValue] / [self.filesize floatValue]);
}
Как видите, переменная-член resourceData хранит данные файла во время его загрузки. Переменная filesize содержит полный размер файла, который был возвращен моим веб-сервисом в заголовке Content-Length.
Все работает вроде нормально, я продолжаю получать загруженные данные с несколькими выполнениями didReceiveData , как и должен, но когда я пытаюсь вычислить значение прогресса, правильное значение не возвращается. Ниже приведен небольшой пример того, что я получаю в журнале консоли:
content-length: 4687472 bytes
resourceData length: 2904616
filesize: 4687472
float filesize: -1.000000
progress: -2904616.000000
Для справки, progressView.progress - это число с плавающей точкой. размер файла - это NSNumber, который содержит long long. Наконец, resourceLength - это NSNumber, содержащий NSUInteger.
Что мне здесь не хватает?