Я использую службу фоновой передачи для загрузки нескольких видео с помощью NSURLSession
. Загрузка работает нормально, когда приложение находится в фоновом режиме, и меня это устраивает. Моя проблема в том, что я хочу обратный вызов для каждого видео, загруженного из очереди.
Я ожидал, что для каждого загруженного видео будет вызываться следующий метод:
-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler
и следующий метод, когда в системе больше нет сообщений для отправки в наше приложение после фоновой передачи:
-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
Но оба метода вызываются, когда все загрузки заканчиваются. Я поставил 3 видео для загрузки, а затем поставил приложение в фоновом режиме. Оба метода вызываются после того, как все 3 видео были загружены.
Вот что я делаю в этих методах:
AppDelegate
-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier
completionHandler:(void (^)())completionHandler
{
self.backgroundTransferCompletionHandler = completionHandler;
}
ЗагрузитьViewController
- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (appDelegate.backgroundTransferCompletionHandler)
{
void (^completionHandler)() = appDelegate.backgroundTransferCompletionHandler;
appDelegate.backgroundTransferCompletionHandler = nil;
completionHandler();
}
NSLog(@"All tasks are finished");
}
Можно ли показать пользователю локальное уведомление о загрузке каждого видео? Или мне придется ждать, пока все видео не загрузятся в фоновом режиме?
Если ответ НЕТ, тогда мой вопрос: какова цель этих двух разных обратных вызовов? Что отличает их друг от друга?