Я пытаюсь интегрировать объект NSURLConnection с UIProgressView, поэтому я могу обновить пользователя, когда загрузка файла происходит в фоновом режиме.
Я создал отдельный объект для загрузки файла в фоновом режиме, и у меня возникают проблемы с выяснением того, как обновить свойство progress в объекте UIProgressView с правильным значением. Это, вероятно, что-то очень простое, но я не могу понять это с помощью Googling.
Вот код, который у меня есть:
- (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]);
}
Как вы можете видеть, переменная-член resourceDatab > хранит данные файла во время загрузки. Переменная члена filesize содержит полный размер файла, возвращенный моей веб-службой в заголовок Content-Length.
Все работает нормально, я продолжаю получать загруженные данные с несколькими версиями didReceiveDatab > , как и следовало бы, но когда я пытаюсь вычислить значение прогресса, правильное значение не возвращается. Ниже приведен небольшой пример того, что я получаю в своем журнале консоли:
content-length: 4687472 bytes
resourceData length: 2904616
filesize: 4687472
float filesize: -1.000000
progress: -2904616.000000
Для справки, progressView.progress - это float. fileize - это NSNumber, который длится долго. Наконец, resourceLength является NSNumber, в котором содержится NSUInteger.
Что мне здесь не хватает?