Ios 在后台状态下下载多个小文件
有人能建议一种在后台下载多个文件的解决方案吗?比如说100个文件。重要的是,下载url的生命周期为15分钟,因此我们需要获取一个下载url,然后开始下载。我们无法预取所有url并将其添加到下载任务中,因为这可能会导致在成功下载几次后,过期url的下载失败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
提前感谢。您可以执行以下操作:
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()
}
解释
- 每次设置时,操作系统都会在变量
中执行didSet块urlFetchedAsString
- didSet块将从url获取数据并将其保存为
NSData
意味着从url获取数据将在不同的线程上完成,以防止阻塞UI线程dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u BACKGROUND,0)
- 保存完后,将设置变量
,并执行此变量的data
。在此块中,您可以实现解析算法didSet
- 获取url本身取决于您,因为您没有明确它们在哪里,或者如何获取它们
- 在这里,我假设您不需要复制所有URL,因为正如您所说,它们将在15分钟内过期