下载背景状态下的多个小文件

时间:2016-02-26 11:46:09

标签: ios background-mode

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

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块将从网址获取数据并将其另存为NSData
  • dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)表示从url获取数据将在不同的线程上完成,以防止阻止UI线程
  • 完成保存后,将设置变量data,并执行此变量的didSet。在此块中,您可以实现解析算法。
  • 获取网址本身取决于您,因为您没有说明它们的位置或者您将如何获取它们

注意

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