Загрузка NSURLSession не работает

Я пытаюсь загрузить несколько файлов, используя NSURL фоновый сеанс с nsurlsessiontask. Все работает как прелесть, когда приложение работает в режиме отладки (когда устройство подключено к Xcode), не работает при отключении устройства (iPad) от Xcode.

Я использую Xcode 7.3.1 с iOS 9.3.5. Я уже провел недели, отслеживая это странное поведение, но не получив прорывов. Может быть, я пропустил что-то, чтобы выполнить загрузку фона. Недавно обновленные версии Xcode до 8.1.2 и iOS до 10.2.1 при условии, что обновление может решить проблему, но это не так.

Ответ 1

В Навигаторе проектов выберите цель проекта в верхней части. Затем в главном окне перейдите на вкладку "Возможности", и там будут отображаться все функции, которые можно включить или отключить, просто используя кнопку переключателя. Среди них найдите область фоновых режимов (вторая с конца) и нажмите кнопку переключателя справа, чтобы включить ее. введите описание изображения здесь

После этого swith 'Background fetch'.

введите описание изображения здесь

Ответ 2

Оформить мой рабочий код,

NSURL *url = [NSURL URLWithString:imageURL];
NSURLSessionTask *_imageDownloadTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (data) {
           //Here you can read your files from data
        if (image) {
            dispatch_async(dispatch_get_main_queue(), ^{
                  //Save your files here for cache purpose
                @try {
                    //You can handle onDownloadFinishWithFile: here too using delegate protocol 
                }
                @catch (NSException *exception) {
                          NSLog(@"%@", exception.reason);
                }
                @finally {
                  // Defines a block of related code that is subsequently executed whether an exception is thrown or not.
                }
            });
        }
    }
}];
[_imageDownloadTask resume]; 

[ Примечание: Я использую код выше для загрузки изображений].

Ответ 3

Убедитесь, что флажок Фоновая выборка в фоновых режимах отмечена. введите описание изображения здесь

Ответ 4

см. ссылку ниже и выполните шаги

https://www.appcoda.com/background-transfer-service-ios7/

  -(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session{
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;

// Check if all download tasks have been finished.
[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
    if ([downloadTasks count] == 0) {
        if (appDelegate.backgroundTransferCompletionHandler != nil) {
            // Copy locally the completion handler.
            void(^completionHandler)() = appDelegate.backgroundTransferCompletionHandler;

            // Make nil the backgroundTransferCompletionHandler.
            appDelegate.backgroundTransferCompletionHandler = nil;

            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                // Call the completion handler to tell the system that there are no other background transfers.
                completionHandler();

                // Show a local notification when all downloads are over.
                UILocalNotification *localNotification = [[UILocalNotification alloc] init];
                localNotification.alertBody = @"All files have been downloaded!";
                [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
            }];
        }
    }
}];

}