任何人都可以建议在后台下载多个文件的解决方案,比如 100s。重要的是下载 url 的生命周期为 15 分钟,因此我们需要获取下载 url 然后开始下载。我们不能预取所有的 url 并将其添加到下载任务中,因为这可能导致在几次成功下载后过期 url 下载失败。
提前致谢。
任何人都可以建议在后台下载多个文件的解决方案,比如 100s。重要的是下载 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 块NSData
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)
意味着从 url 获取数据将在不同的线程上完成,以防止阻塞 UI 线程data
将设置didSet
变量并执行此变量的 。在这个块中,您可以实现您的解析算法。笔记