Скачать несколько небольших файлов в фоновом режиме
Может кто-нибудь предложить решение для загрузки нескольких файлов, скажем, 100, в фоновом режиме. Важно то, что срок действия URL-адреса загрузки составляет 15 минут, поэтому нам необходимо получить URL-адрес загрузки и затем начать загрузку. Мы не можем предварительно извлечь все URL-адреса и добавить их в задачу загрузки, поскольку это может привести к сбоям при загрузке просроченного URL-адреса после нескольких успешных загрузок.
Заранее спасибо.
1 ответ
Вы можете сделать следующее:
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
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)
означает, что выборка данных из URL будет выполняться в другом потоке, чтобы предотвратить блокирование потока пользовательского интерфейса- После того, как вы спаслись, переменная
data
будет установлен иdidSet
для этой переменной будет выполнен. В этом блоке вы можете реализовать свой алгоритм разбора. - Выбор самого URL зависит от вас, потому что вы не уточнили, где они находятся и как вы их получите
Заметка
- Здесь я предположил, что вам не нужно копировать все URL-адреса, потому что, как вы сказали, они истекают через 15 минут