Цель C загрузка нескольких PDF-файлов с помощью задачи загрузки NSURLSession с URL - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу создать приложение, которое также включает в себя возможность показывать и сохранять PDF-файлы внутри приложения и отображать их (в виде файловой системы) в виде таблицы, открывать их, когда я нажимаю на один PDF-файл и открываю PDF-файл в Document Interaction. Controller.My проблема в PDF-файл загружен. Но файлы PDF хранятся по локальному пути.

- (недействительно) downloadMultiplePDFFiles

{

NSURL * ClientWebServiceURL = [NSURL URLWithString: DOC_VIEWER_URL];

NSString * str_URL = [NSString stringWithFormat: @ "% @", ClientWebServiceURL];

NSURL * url = [NSURL URLWithString: str_URL];

// --- добавление данных в url- -

NSString * body = [NSString stringWithFormat: @ "userid =% @ & sessionid =% @ & tenantid =% @ & deviceid =% @ & documentmentid =% @ & documenttype =% @ & devicetype =% @ & isencrypted = Y" , self-> userid, self-> sessionid, self-> tenantid, self-> deviceid, [NSString stringWithFormat: @ "% @", documentmentid], [documenttype stringByReplacingOccurferencesOfString: @ "" withString: @ ""], devicetype] ;

// --- отправка запроса на сервер ---

NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL: url];

[набор запросовHTTPMethod: @ "POST"];

[запрос setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];

self.d ownloadTask = [self.backgroundSession downloadTaskWithRequest: запрос];

[self.downloadTask резюме];

}

  • (void) URLSession: (NSURLSession *) сессия downloadTask: (NSURLSessionDownloadTask *) downloadTask didWriteData: (int64_t) bytesWritten totalBytesWritten: (int64_t) totalBytesWritten totalBytesExpectedToWrite: (int64_t) totalBytesExpectedToWrite {
  • (void) URLSession: (NSURLSession *) сеанс downloadTask: (NSURLSessionDownloadTask *) downloadTask didFinishDownloadingToURL: (NSURL *) downloadURL {

NSFileManager * fileManager = [NSFileManager defaultManager];

NSArray * URLs = [fileManager URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask];

NSURL * documentsDirectory = [URLs objectAtIndex: 0];

NSURL [[downloadTask originalRequest] URL];

NSURL * destinationURL = [DocumentsDirectory URLByAppendingPathComponent: [originalURL lastPathComponent]];

NSError * errorCopy;

// Для целей тестируя, удалите любой существующий файл в месте назначения.

[fileManager removeItemAtURL: destinationURL error: NULL];

BOOL success = [fileManager copyItemAtURL: downloadURL toURL: destinationURL error: & errorCopy];

if (success)

{

dispatch_asyn c (dispatch_get_main_queue (), ^ {

// загрузка завершена - откройте pdf

self.documentInteractionController = [UIDocumentInteractionController взаимодействияControllerWithURL: destinationURL];

// Настройка взаимодействия с документом oller

[self.documentInteractionController setDelegate: self];

// Предварительный просмотр PDF

[self.documentInteractionController presentPreviewAnimated: YES];

// self .progressView.hidden = YES;

});

} else {

NSLog (@ "Ошибка при копировании:% @", [errorCopy localizedDescription]);

}

// myPath = [[NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, Да)

// NSFileManager * fileManager = [NSFileManager defaultManager];

// [fileManager moveItemAtURL: downloadURL toURL: [NSURL fileURLWithPath: myPath] ошибка: ноль];

}

  • (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) контроллер {

вернуть себя;

}

  • (void) URLS : (NSURLSession *) сеансовая задача: (NSURLSessionTask *) задача didCompleteWithError: (NSError *) error {

if (error == nil) {

NSLog (@ "Task: % @ успешно завершено ", задача);

} else {

NSLog (@" Задача:% @ выполнена с ошибкой:% @ ", задача, [ошибка localizedDescription]);

}

double progress = (double) task.countOfBytesReceived / (double) task.countOfBytesExpectedToReceive;

dispatch_asyn c (dispatch_get_main_queue (), ^ {

// self.progressView.progress = progress;

});

// self.downloa dTask = nil;

}

  • (void) URLSessionDidFinishEventsForBackgroundURLSession: (NSURLSession *) session {

AppDelegate * appDelegate = (AppDelegate *) [ UIApplication sharedApplication] делегат];

if (appDelegate.backgroundSessionCompletionHandler) {

void (^ завершениюHandler) () = appDelegate.backgroundSessionCompletionHandler;

appDelegationChill_backSpace.ground; 1153 *

completeHandler ();

}

NSLog (@ "Все задачи завершены");

}

Как только файл будет скачал я получил путь вот так.

/ Пользователи / Библиотека / Разработчик / CoreSimulator / Устройства / 9DEA0DEB-662E-4080-AE2E-F2E3429A5A64 / данные / Контейнеры / Данные / Приложение / BD7BD3D8-E65A-4977-A320 -69672A673597 / Documents / ViewDo c .sv c

Проблема в том, что pdf-файл не доступен по этому пути. И каждый раз, когда загружается pdf-файл. Файл в UIDocument inter контроллер действий. Пожалуйста, помогите мне любое тело. Заранее спасибо.

...