在后台线程中下载多个文件?
Downloading muliple files in background thread?
我是按用户要求一次下载或一个一个下载文件。下载文件后,我将通知发送到另一个视图作为成功消息。
当我一次下载一个文件时,它正在成功下载文件。但是当我试图在 6 秒的时间间隔内下载两个或更多文件时(按下另一个下载按钮),第一个文件没有下载。它只下载我发送下载的最后一个文件。
如有任何帮助,我们将不胜感激。
url=[NSURL URLWithString:currentURL];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc]initWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
{ //Background Thread
{
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *dataMain, NSError *error)
{
if ([dataMain length]/1024.0f > 600 && error == nil)
{
[dataMain writeToFile:pathOriginal atomically:YES];
NSLog(@"orginal file saved");
}
}];
}
dispatch_async(dispatch_get_main_queue(), ^(void){
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:self];
}); });
在每次调用之前使用 dispatch async。这样每次调用都会 运行 在不同的线程上,并且会解决您的问题。
希望对您有所帮助!
NSURLConnection
已弃用。您应该使用 NSURLSession
进行新开发。 NSURLSession
将处理多个下载。 (NSURLConnection
也是如此,但鉴于它已被弃用,因此不值得调试。
我是按用户要求一次下载或一个一个下载文件。下载文件后,我将通知发送到另一个视图作为成功消息。
当我一次下载一个文件时,它正在成功下载文件。但是当我试图在 6 秒的时间间隔内下载两个或更多文件时(按下另一个下载按钮),第一个文件没有下载。它只下载我发送下载的最后一个文件。
如有任何帮助,我们将不胜感激。
url=[NSURL URLWithString:currentURL];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc]initWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
{ //Background Thread
{
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *dataMain, NSError *error)
{
if ([dataMain length]/1024.0f > 600 && error == nil)
{
[dataMain writeToFile:pathOriginal atomically:YES];
NSLog(@"orginal file saved");
}
}];
}
dispatch_async(dispatch_get_main_queue(), ^(void){
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:self];
}); });
在每次调用之前使用 dispatch async。这样每次调用都会 运行 在不同的线程上,并且会解决您的问题。
希望对您有所帮助!
NSURLConnection
已弃用。您应该使用 NSURLSession
进行新开发。 NSURLSession
将处理多个下载。 (NSURLConnection
也是如此,但鉴于它已被弃用,因此不值得调试。