私は画像のリストをダウンロードし、画像がダウンロードされるとプログレスバーが更新される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コードを追加しました。 –