2015-01-25 4 views
1

Я борюсь с чем-то, и я хотел бы спросить вас, можете ли вы указать мне в правильном направлении.Выполнение операций один за другим

У меня есть четыре задачи, которые я хочу выполнить, - один за другим.

  1. Fetch HTML-код с веб
  2. Разбираем этот код и сохранить ядро ​​хранения данных
  3. Используйте эти данные и пакетное Сохранить в календаре
  4. Загрузить проанализированные данные на мой собственный веб-сервер.

Я написал весь код для этого, и он выполняется отлично. Тем не менее, порой он борется, поскольку некоторые из кода выполняются до того, как другой закончен.

Пример:

func startProcess() { 

    fetchHTMLFromWeb() 

    parseHTML() 

    saveToCalendar() 

    //Sometimes uploadToWeb() starts before saveToCalendar() is finished 
    uploadToWeb() 

} 

Я пытался читать на НОД, но это довольно сложный вопрос, и я нахожу, что это трудно понять это.

Вы можете порекомендовать любые хорошие чтения по этому предмету?

спасибо!

+0

В чем проблема? Когда вы закончите, чтобы получить html-код Просто вызовите синтаксический анализатор с выбранными данными. Это не сработало? – LastMove

+0

Это то, чего я хочу достичь, но как я могу это сделать, чтобы следующий код был выполнен только тогда, когда предыдущий закончен? Я думаю, что функции обратного вызова - это путь, но для меня это неизвестная территория. – fisher

+0

Почему бы не вызвать parseHTML() в функции fetchHTMLFromWeb()? И вызвать startProcess в фоновом потоке? – LastMove

ответ

1

Вы можете использовать GCD для выполнения всех ваших вещей в фоновом режиме.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    self.startProcess(); 
}); 

с этим, startProcess начнется в очереди/потоке фона. Таким образом, вы можете

В методе fetchHtmlFromWeb просто позвоните parseHtml(), когда выборка завершена. надеюсь, что это поможет.

+0

Спасибо! Я посмотрю на это. Кажется, это правильный путь. – fisher

Смежные вопросы