QLPreviewController медленная загрузка многостраничных документов
Я использую QLPreviewController для предварительного просмотра PDF.
Сначала я получаю путь к файлу:
NSString *PDFPath = [[[[self.tableData objectAtIndex:indexPath.row] objectForKey:@"Name"] componentsSeparatedByString:@"FTP\\"] lastObject];
NSString *PDFFile = [[[[self.tableData objectAtIndex:indexPath.row] objectForKey:@"Name"] componentsSeparatedByString:@"\\"] lastObject];
NSString *encodedUrlStr = [PDFPath urlencode];
Затем я беру путь к файлу и получаю байты файла PDF из API веб-службы.
NSURLSessionTask *task = [dataSource.areaData GetPDFFileTestTwo:[NSString stringWithFormat:@"%@",encodedUrlStr] completion:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
Внутри обработчика завершения я затем конвертирую байты в NSData:
NSError *myError;
NSArray *tableArray = [[NSArray alloc]initWithArray:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&myError]];
NSData *dataBytes;
for (NSDictionary *dict in tableArray) {
NSString *base64 = dict[@"data"];
dataBytes = [[NSData alloc] initWithBase64EncodedString:base64 options:0];
}
Затем я беру NSData и сохраняю его в папку с документами, используя NSFileManager:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,PDFFile];
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
[[NSFileManager defaultManager] createFileAtPath:filePath contents:dataBytes attributes:nil];
}
а затем я просматриваю PDF, используя QLPreviewController:
dispatch_async(dispatch_get_main_queue(), ^{
_previewController = [[QLPreviewController alloc] init];
_previewController.dataSource = self;
_previewController.delegate = self;
[self presentViewController:_previewController animated:NO completion:^{
[_previewController didMoveToParentViewController:self];
}];
});
Проблема, с которой я сталкиваюсь, заключается в том, что когда QLPreviewController представлен с несколькими страницами (не несколькими документами), иногда загружается все страницы медленно, я получаю серые страницы, пока они не загружаются, иногда мое приложение вылетает, а иногда я получаю эту ошибку:
Ошибка связи: { count = 1, contents = "XPCErrorDescription" => { length = 22, contents = "Соединение прервано" } }>
Недостаточно памяти (22,2–25 МБ). Размер файла PDF варьируется от 465 КБ до 2 МБ, иногда 5,5 МБ.
Мне бы очень хотелось, чтобы я мог загрузить файл в QLPreviewController и затем представить, но я ищу что-то в этом роде, я прочитал сопоставленные файлы, но не до конца их понимаю.
О да, и вот мои методы делегата:
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
{
return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
return [NSURL fileURLWithPath:filePath];
}
и здесь определен previewController:
@property (nonatomic, retain) QLPreviewController *previewController;
Кто-нибудь может помочь?