didEnterBackground — Продолжать ждать запроса ASIHTTP и результата синтаксического анализа

#iphone #objective-c #background #asihttprequest #uiapplicationdelegate

#iPhone #objective-c #предыстория #asihttprequest #uiapplicationdelegate #фон

Вопрос:

Может быть, вы могли бы помочь мне найти подходящий способ справиться с этим :

  1. У меня есть NSTimer (запущенный в моем AppDelegate), который запускает класс для запуска асинхронного запроса сервера (я использую ASIFormDataRequest)
  2. Когда получен HTTP-JSON-ответ, я анализирую его с помощью TouchJSON
  3. Затем я зацикливаю полученный NSDictionary для заполнения выделенного NSManagedObjectContext
  4. Затем я сохраняю этот контекст при некоторых пользовательских взаимодействиях

Иногда HTTP-запрос отправляется, и пользователь завершает работу приложения. Я хочу получить дополнительное время для выполнения задач 2-4 в фоновом режиме.

Я прочитал документ Apple, но все еще не ясно, как выиграть дополнительное время для уже запущенного асинхронного действия?

Короче говоря, как мне следует использовать beginBackgroundTaskWithExpirationHandler?

Спасибо за вашу очень полезную помощь.

Херауд

Комментарии:

1. Используете ли вы startAsynchronous для запуска запроса асинхронно?

2. да, я использую startAsynchronous

Ответ №1:

ASIHTTPRequest поддерживает выполнение запросов в фоновом режиме:

 [request setShouldContinueWhenAppEntersBackground:YES];
  

Если вы выполните шаги 2-4 внутри уведомлений делегата и установите вышеуказанный флаг, то это должно сделать то, что вы хотите.

Однако вы не сможете взаимодействовать с пользователем, как только ваше приложение перейдет в фоновый режим.

Комментарии:

1. Да! Звучит здорово. Знаете ли вы, запускается ли метод AppDelegate после выхода из фонового режима (фоновые вычисления завершены). Я мог бы использовать этот метод для сохранения контекста

2. Возможно, было бы лучше задать отдельный вопрос по этому поводу. Возможно, если вы поместите запросы в ASINetworkQueue и используете делегат didFinish очереди, тогда это может сработать, но я не уверен, что я точно понял, что вы пытаетесь сделать.