QuickLook не может загрузить некоторые файлы

Фон

Я пытаюсь открыть некоторые файлы через QuickLook. У меня есть.docm и.pdf, с которыми я смог воспроизвести эту ошибку. Сначала я думал, что это из-за макросов документов Microsoft Office, но так как я получаю сообщение об ошибке с PDF размером более 100 МБ, мне интересно, что-то не так с QuickLook.

ошибка

[default] View service did terminate with error: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted} #Remote

Эта ошибка неоднократно выдается из QuickLook. Из того, что я видел, эта ошибка, похоже, встречается только при использовании симулятора и попытке отправить электронное письмо. Я использую iPhone 7+ и могу воспроизводить каждый раз.

Мне интересно, могут ли файлы, которые я использую, иметь проблемы с ними.

тестирование

Я пробовал следующие файлы с разными результатами

  • 100 МБ.pdf - Успех
  • 100MB .doc - Успех
  • 17MB .docm - Ошибка
  • 85 МБ.docx - Успех
  • 100 МБ.pdf - сбой (в отличие от первого, этот загружает файл, но несколько раз мигает, пока не перейдет к экрану "Ошибка" QuickLook)

Вопросы

Есть ли какие-либо ограничения по размеру или тайм-аут на QuickLook, которые могут вызвать эту странную ошибку?

0 ответов

На всякий случай, если это происходит в iOS12, попробуйте добавить задержку при представлении контроллера Quicklook, как это -

Objective-C

 QLPreviewController *previewController = [[QLPreviewController alloc]init];
 previewController.delegate = self;
 previewController.dataSource = self;
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)),  dispatch_get_main_queue(), ^{
     [self presentViewController:previewController animated:YES completion:nil];
 });                                                                      

стриж

let previewController = QLPreviewController()
        previewController.dataSource = self
        previewController.delegate = self
        let delay = DispatchTime.now() + 0.3
        DispatchQueue.main.asyncAfter(deadline: delay, execute: {
            self.present(previewController, animated: true)
        })

Это исправлено для меня.

Другие вопросы по тегам