2016-02-26 3 views
0

Может кто-нибудь предложить решение для загрузки нескольких файлов, скажем, 100s, в фоновом режиме. Важно то, что URL-адрес загрузки имеет продолжительность жизни 15 минут, поэтому требуется, чтобы мы загрузили URL-адрес загрузки, а затем начали загрузку. Мы не можем предварительно отбирать все URL-адреса и добавлять их в загружаемую задачу, так как это может привести к сбоям при загрузке с истекшим URL после нескольких успешных загрузок.Загрузите несколько небольших файлов в фоновом состоянии

Заранее спасибо.

ответ

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() 
} 

Объяснение

  • ОС будет выполнять блок didSet в переменной urlFetchedAsString каждый раз, когда он установлен
  • Блок didSet будет извлеките данные из URL-адреса и сохраните их как NSData
  • dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) означает, что извлечение данных из URL будет сделано на другом потоке, чтобы предотвратить блокирование пользовательского интерфейса нитку
  • После сделано избавляя вас будет установить переменную data и didSet для этой переменной будет выполняться. В этом блоке вы можете реализовать свой алгоритм синтаксического анализа.
  • Получение самого URL до вас, потому что вы не выяснить, где они находятся и как будет получить у них

Примечание

  • Здесь я предположил, что вы не» t необходимо скопировать все URL-адреса, поскольку, как вы сказали, они истекают через 15 минут
Смежные вопросы