Скачать несколько небольших файлов в фоновом режиме

Может кто-нибудь предложить решение для загрузки нескольких файлов, скажем, 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 минут
Другие вопросы по тегам