Ios 在后台状态下下载多个小文件

Ios 在后台状态下下载多个小文件,ios,background-mode,Ios,Background Mode,有人能建议一种在后台下载多个文件的解决方案吗?比如说100个文件。重要的是,下载url的生命周期为15分钟,因此我们需要获取一个下载url,然后开始下载。我们无法预取所有url并将其添加到下载任务中,因为这可能会导致在成功下载几次后,过期url的下载失败 提前感谢。您可以执行以下操作: var data : NSData?{ didSet{ //Parse the data to any thing you want } } var urlFetchedAsString

有人能建议一种在后台下载多个文件的解决方案吗?比如说100个文件。重要的是,下载url的生命周期为15分钟,因此我们需要获取一个下载url,然后开始下载。我们无法预取所有url并将其添加到下载任务中,因为这可能会导致在成功下载几次后,过期url的下载失败


提前感谢。

您可以执行以下操作:

var data : NSData?{
    didSet{
    //Parse the data to any thing you want
    }
}
var urlFetchedAsString : String? {
    didSet{
        if(urlFetchedAsString == nil)
            return
        let url : NSURL = NSURL(string: urlFetchedAsString!)!
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
    () -> Void in
    data = NSData(contentsOfURL: url)
     })
    }
}
func fetchURL() ->String{
    //Fetched Your url and return 
}
override func  viewDidLoad(){
    super.viewDidLoad()
    urlFetchedAsString = fetchURL()
}
解释

  • 每次设置时,操作系统都会在变量
    urlFetchedAsString
    中执行didSet块
  • didSet块将从url获取数据并将其保存为
    NSData
  • dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u BACKGROUND,0)
    意味着从url获取数据将在不同的线程上完成,以防止阻塞UI线程
  • 保存完后,将设置变量
    data
    ,并执行此变量的
    didSet
    。在此块中,您可以实现解析算法
  • 获取url本身取决于您,因为您没有明确它们在哪里,或者如何获取它们
注意

  • 在这里,我假设您不需要复制所有URL,因为正如您所说,它们将在15分钟内过期