Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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_Objective C_Nsurlsession_Uibackgroundtask - Fatal编程技术网

iOS在后台下载多个文件

iOS在后台下载多个文件,ios,objective-c,nsurlsession,uibackgroundtask,Ios,Objective C,Nsurlsession,Uibackgroundtask,我读了几篇文章,但找不到我要找的东西,所以这里是我的问题 我正在从服务器下载一些文件,在这种情况下,用户锁定了屏幕,在这种情况下,ios设备失去了网络连接,文件同步失败 我几乎没有读过关于NSURLSession的文章,但它可以从iOS 7开始使用,我正在开发的应用程序支持iOS 6及更高版本 因此,有没有一种方法可以让我在后台下载20或30个文件,或者当用户以一种通用方式点击锁屏时,不必担心我支持的操作系统版本 到目前为止,我已经了解到,我们有30秒的时间来执行网络活动,那么在这30秒内服务器

我读了几篇文章,但找不到我要找的东西,所以这里是我的问题

我正在从服务器下载一些文件,在这种情况下,用户锁定了屏幕,在这种情况下,ios设备失去了网络连接,文件同步失败

我几乎没有读过关于NSURLSession的文章,但它可以从iOS 7开始使用,我正在开发的应用程序支持iOS 6及更高版本

因此,有没有一种方法可以让我在后台下载20或30个文件,或者当用户以一种通用方式点击锁屏时,不必担心我支持的操作系统版本

到目前为止,我已经了解到,我们有30秒的时间来执行网络活动,那么在这30秒内服务器调用的数量是否有限制

关于我的代码,我有一个名为DownloadFiles的类,它调用一个服务,该服务返回一个fileURL数组,并使用
NSData
获取这些文件并将它们保存在doc目录中,因此,在实现后台调用时,我需要传递数组的索引,该索引将检测正在下载的当前文件,然后从下一个索引继续

  for(NSDictionary *dict in filearray) {
     NSString *fileURL = [[dict valueForKey:@"FileURL"]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     NSData *fileData  = [NSData dataWithContentsOfURL:theFileURL];

     if (fileData.length==0 || fileData==nil || theFileURL==nil) {
        NSLog(@"empty file URL = %@",theFileURL);
     }
     if (fileData.length!=0){
        BOOL savefile = [fileData writeToFile:[HTML_SERVER_FILES stringByAppendingPathComponent:[dict valueForKey:@"FileName"]] atomically:YES];
        if (savefile!=YES) {
           NSLog(@"Not saved file = %@",theFileURL);
        }else{
           NSLog(@"file saved at path %@",HTML_SERVER_FILES);
        }

        fileData = nil;
    }
}

请告诉我在这种情况下需要做什么。

您确定不能要求iOS7吗?它已经启动了,iOS8即将推出,这可能会促使旧设备的进一步淘汰,从而导致旧操作系统版本的淘汰。如果你能使用NSURLSession的后台功能,它可能是最好的解决方案。@MattGibson:是的,你说得对,但客户希望他的应用程序也支持iOS 6。另外,您是否知道使用NSURLSession可以拨打的电话数量,因为我正在尝试下载20-30个文件,但在此期间,如果用户锁定其设备,那么在这种情况下,我们如何使用NSURLSession。我从未尝试过如此多的文件。通常,如果在NSURLSession中使用后台会话,则如果用户锁定其设备,下载将在后台继续。但是,下载速度可能会减慢。后台传输没有优先权。它们最终应该完成,并且您应该能够对一组进行排队(并设置每个服务器的最大连接数,以便它们一次只出现一个),但您必须进行试验。从今年的WWDC看“基础网络中的新东西”来感受它。这里有一个关于后台传输的部分。不过,从根本上说,iOS会将你的应用程序退出和手机锁定视为用户认为你的应用程序目前没有那么重要的提示,也不能保证你的下载完成。即使您的应用程序被挂起/终止,您也会收到取消和失败的通知,通过应用程序委派通知,您可以重新连接会话并接收错过的任何重要会话/任务通知。