У меня есть приложение, первое, что он делает, это зарегистрировать себя в API с простой HTTP POST. Я делал это в func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?)
, так как Apple заявляет, что это точка для вызовов URL. Поскольку важно никогда не блокировать основной поток, этот вызов выполняется async.Стратегия получения данных перед запуском приложения
Проблема заключается в том, что, как это делается async, открывается первый экран и сразу же выполняется вызов API. Так как это быстрее, чем при первом вызове API, то второй вызов получает 401.
Для того, чтобы избежать этого, я делаю очень сырную вещь, прежде чем начать второй вызов:
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
while (InformationFromFirsCall == nil)
{
sleep(1)
}
}
Есть лучшая стратегия для этого? Я думал об использовании dispatch_once
в начале каждого вызова API и реализации кода внутри обратного вызова InformationFromFirstCall.
Это разумно?
Спасибо!
Почему бы не поставить экран загрузки и дождаться завершения первого вызова API регистрации? – jestro
@jestro, это неплохая идея, но причина, по которой я использую asyn на первом месте, - это не то, чтобы не допустить, чтобы пользователь ждал и позволял ему испытать приложение, когда все работает на заднем плане. –