이미지 다운로드 목록과 이미지가 다운로드 될 때 진행률 표시 줄이 업데이트되는 iPad 앱이 있습니다. 진행률 표시 줄과 이미지 다운로드가 일치하지 않는 것 같습니다. 진행률 표시 줄은 이미지 다운로드가 완료되기 전에 항상 완료됩니다. 이미지를 다운로드 할 때마다 진행률 표시 줄을 증가시켜야하는 UpdateProgressBar 메서드가 있습니다.진행률 표시 줄이 이미지 다운로드와 동기화되지 않음
-(void)DownloadPhoto{
NSMutableArray *failedDownloads = [[NSMutableArray alloc]init];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
listPhoto = [CoreDataRead GetPhotoList:[self selectedAccountGuid]];
dispatch_group_t downloadGroup = dispatch_group_create();
for (Photo *item in listPhoto) {
NSString *imageName = item.photoName;
NSString *myURL = [NSString stringWithFormat:@"%@%@", @"http://acimagedownload.com/photos/", imageName];
NSURL *url = [NSURL URLWithString:myURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
dispatch_group_enter(downloadGroup);
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError == nil && data != nil)
{
if (data != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat:@"%@%@",item.guid, @".png"]];
[data writeToFile:path atomically:YES];
NSLog(@"Photo Downloaded %@!", @"");
}
else
{
NSLog(@"image is not downloaded");
}
}
else if (connectionError != nil)
{
[failedDownloads addObject:myURL];
NSLog(@"Error %@",[connectionError description]);
}
else
{
[failedDownloads addObject:myURL];
NSLog(@"Image Download Failed %@!", @"");
}
dispatch_group_leave(downloadGroup);
dispatch_async(dispatch_get_main_queue(), ^{
[self UpdateProgressBar];
});
}];
dispatch_group_wait(downloadGroup, DISPATCH_TIME_FOREVER);
}
dispatch_async(dispatch_get_main_queue(), ^{
[self DownloadVideo];
});
});
}
-(void)UpdateProgressBar{
currentTask = currentTask + 1;
NSLog(@"Current Task %@!", [@(currentTask) stringValue]);
float progressPercentage = (float)currentTask/(float)taskCount;
[self.progressBar setProgress:progressPercentage animated:YES];
if(currentTask == taskCount){
[self ShowDoneAlert];
}
}
NSURLConnection'sendAsynchronousRequest'는 iOS 9에서 더 이상 사용되지 않습니다. 사실 NSURLConnection의 거의 모든 부분은 더 이상 사용되지 않습니다. 이전에 2 개의 주요 OS 버전에서 사용되지 않는 API를 사용하여 새로운 개발을하는 것은 현명한 방법이 아닙니다. NSURLSession을 사용하여 코드를 다시 작성하는 것이 좋습니다. –
UpdateProgressBar의 코드는이 질문의 적절한 부분처럼 보입니다. – danh
UpdateProgressBar 코드를 추가했습니다. –