Я использую метод выборки фона performFetchWithCompletionHandler
, чтобы обновить некоторые пользовательские данные. Однако эти процессы довольно сложны и включают в себя операторы блоков, поэтому они не выполняются синхронно.Как правильно выполнить executeFetchWithCompletionHandler с несколькими блоками внутри
Меня беспокоит то, что я всегда возвращался completionHandler(UIBackgroundFetchResultNewData);
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
NSLog(@"Start background data fetch");
// Update data -- this method contains various blocks inside
[GETDataRequest updateUserDataWithUser: user];
// Update images -- this method contains various blocks inside
[GETImagesRequest updateUserImagesWithUser: user];
NSLog(@"Background Data Fetch completed");
completionHandler(UIBackgroundFetchResultNewData);
}
Согласно this post, в отношении к completionHandler(UIBackgroundFetchResultNewData)
следующее было сказано:
Вы должны назвать это позволить IOS знать, что в результатом вашей фоновой выборки был. Он использует эту информацию для планирования будущих фоновых настроек. Если вы пренебрегаете этим, будущие фоновые выборки могут быть отложены ОС. Последствия отказа от вызова этого обработчика могут включать полное прекращение действия приложения.
Как вы можете видеть здесь, я всегда говорю, что это успешно, действительно ли это на самом деле. Ответчик должен был сказать о моей ситуации:
... вы должны вызвать обработчик завершения только тогда, когда ваш выбор действительно завершен. В противном случае iOS, вероятно, вернет ваше приложение обратно до того, как соединение завершится, и приложения на самом деле не смогут определить UIBackgroundFetchResultNewData по сравнению с UIBackgroundFetchResultNoData или UIBackgroundFetchResultFailed до тех пор в любом случае. Как вы узнаете, что ваше соединение будет успешным?
Является ли то, что я делаю НАСТОЯЩАЯ проблема? Будет ли он фактически отключать обновления? Если это принесет неожиданные результаты, каково решение этого беспорядка? Ответ на упомянутый мною вопрос был для меня неясным. Я попытался использовать блок-переменные, чтобы он функционировал так, как должен, но не увенчался успехом. Очень признателен.
«Вы должны вызвать обработчик завершения только тогда, когда ваш выбор действительно завершен». Это совершенно неправильно. Как раз наоборот. Если вы не перезвоните и не вернетесь назад, вы никогда не получите возможность выбора фона; система будет «черным» вам. – matt