Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用iOS后台传输服务下载多个文件_Ios_Nsurlsession_Nsurlsessiondownloadtask - Fatal编程技术网

使用iOS后台传输服务下载多个文件

使用iOS后台传输服务下载多个文件,ios,nsurlsession,nsurlsessiondownloadtask,Ios,Nsurlsession,Nsurlsessiondownloadtask,问题是:如何使用新的后台传输服务(包括应用程序挂起的情况)逐个下载多个文件?我读了这篇文章,让它为一个文件工作。但是我需要一个接一个地下载文件(因此添加多个nsurlsessiondownloadstaskss将不起作用(因为下载URL只在短时间内有效) 基本上,我正在尝试的是,一旦应用程序在应用程序:handleeventsforbackgroundursession:completionHandler:中被通知上一次下载已完成,就安排另一次下载。但我只调用了一次此方法。知道为什么吗?当pp暂

问题是:如何使用新的后台传输服务(包括应用程序挂起的情况)逐个下载多个文件?我读了这篇文章,让它为一个文件工作。但是我需要一个接一个地下载文件(因此添加多个
nsurlsessiondownloadstasks
s将不起作用(因为下载URL只在短时间内有效)

基本上,我正在尝试的是,一旦应用程序在
应用程序:handleeventsforbackgroundursession:completionHandler:
中被通知上一次下载已完成,就安排另一次下载。但我只调用了一次此方法。知道为什么吗?当pp暂停使用,敬请谅解

更新:


抱歉,我可能不清楚实际的问题是什么:一般来说,并不是我没有收到任务完成的通知,而是我没有调用
应用程序:handleEventsForBackgroundURLSession:completionHandler:
,以便在后台运行应用程序时执行第二个下载任务它为第一个下载任务调用的et(在应用程序处于前台时启动,然后在下载完成前进入后台)然后我启动第二个下载任务,调用我在
应用程序:handleEventsForBackgroundURLSession:completionHandler:
中得到的
completionHandler
,并且从未对第二个文件调用过此方法。

我建议在
NSURLSessionAskdelegate
-(void)URLSession:(NSURLSession*)中添加下一个文件会话任务:(NSURLSessionTask*)任务didCompleteWithError:(NSError*)错误
。每当上一个任务完成时,就会调用此方法,因此看起来是将下一个文件排队的合理选择。

从本教程的角度来看()看起来您必须同时开始下载这两个文件。由于您有一个会话中每个主机的最大连接配置,我想您可以将并行下载限制为
1
,然后启动两个下载


我目前正在尝试将其移植到MonoTouch…似乎很有希望…

请查看更新的问题。在
URLSession:task:didpleteWitheror:
中启动第二次下载并不能解决问题,我仍然没有为第二个文件调用
应用程序:handleEventsForBackgroundURLSession:completionHandler:
m、 我明白了。确实看到了奇怪的行为:我想我已经重现了你在示例PoC应用程序中描述的内容。然而,令人费解的是,我们在prod中拥有的更大的应用程序并没有表现出类似的行为(我的回答就是基于此)。不太确定那里发生了什么:/O.P.链接的提到:如果您的应用程序在后台启动后台传输,则后台传输将始终获得
自主
标志。使用上述方法,第二次传输以及任何未来传输将在应用程序运行时启动在后台。这意味着它们只有在设备具有WiFi(非蜂窝)时才能完成电池也很好。我想它们也会被批量处理。也许它能工作,但只是需要一段时间?如果我们面临这样一种情况,即当task1完成时,我们应该在后台连续下载多个文件task2开始,如果task1失败,应用程序终止?@Hadizamani因为iOS首先将文件下载到一个临时文件夹,你会看不到部分下载的文件的任何内容。我猜您也无法访问文件中已下载的部分。