QLPreviewController: quicklookd не загружается

У меня есть простой код, показывающий простой PDF, используя QLPreviewController. Он отлично работает в симуляторе и в очень простом приложении.

В приложении я действительно хочу, чтобы он работал, он не работает на устройстве. Устройство отображает представление предварительного просмотра, но вместо PDF он просто показывает текст "simple.pdf, Portable Document Format (PDF)" и размер файла ( "301KB" в этом случае).

Интересно, что журнал испускает "Не удалось загрузить quicklookd с ошибкой: операция не может быть завершена. (Cocoa ошибка 4097.)"

Я пробовал:

  • Несколько PDF файлов, простой полный текст и IRS W4 PDF. Те же результаты.
  • UIDocumentInteractionController. Те же результаты.

Исключено:

  • Я связываюсь с QuickLook.framework в фазах сборки.
  • [QLPreviewController canPreviewItem:] возвращает YES.

Мой взгляд на наследственность не ужасно сложный; UINavigationController, выходящий из SWRevealViewController. Не важно, насколько мелкий или глубокий я в иерархии навигации, когда PDF является Quicklook'd.

У меня нет идей, и я надеюсь, что кто-то узнает об ошибке.

edit: приложение отлично работает на устройстве iOS 6. Работает в симуляторе на 6.1, 7.0 и 7.1. Сбой на устройстве 7.0, argh!

Ответ 1

Это проблема на 64-битных устройствах. Вы можете воспроизвести его в 64-битных iOS 7-симуляторах. О той же ошибке с другими фреймами сообщается здесь:

Невозможно показать модальный ViewController в iOS7

Обновление настроек архитектуры в настройках сборки на "Стандартные архитектуры (включая 64-разрядные) (armv7, armv7s, arm64)" aka $(ARCHS_STANDARD_INCLUDING_64_BIT) устранит проблему. Это, конечно, если у вас есть совместимые версии всех ваших сторонних библиотек.

По соображениям, которые могут знать только инженеры-программисты, устранение различий между делегатами также приводит к обходному пути через iOS 7.0.4. В моем случае изменение внешнего вида, вызвавшее проблему, -

[[UITableView появление] setSeparatorInset: UIEdgeInsetsZero];

Ответ 2

Наконец сузился до этой строки, которая называется ранним во время запуска приложения.

Как ни странно, добавление этой строки в простейшее приложение не приводит к сбою, поэтому есть и другое дополнительное взаимодействие, которое я не могу найти.

К сожалению, не правильное объяснение, но по крайней мере теперь я могу двигаться дальше. Надеюсь, этот ответ спасет кого-то еще некоторое время!

// We don't want Back button text, move it off-screen
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60.f) forBarMetrics:UIBarMetricsDefault];