0

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

提前致谢。

4

1 回答 1

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

笔记

  • 在这里,我假设您不需要复制所有网址,因为正如您所说,它们将在 15 分钟内到期
于 2016-02-26T12:54:18.183 回答