ios - Quicklook/QLPreviewController 在 ios 8 上显示空白页面而不是 pdf,但在 iOS7 上工作正常

标签 ios pdf ios8 qlpreviewcontroller

我正在尝试在 QLPreviewController 中预览 pdf 文件并使用以下代码。它在 iOS7 上工作正常,在 iOS8 上也适用于其他类型的文件(JPG/PNG),但是当我尝试打开 pdf 时它显示iOS8 上的空白页面而不是内容。奇怪的是它仍然在标题 View 中显示 pdf 的名称。

代码:

QLPreviewController *previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.currentPreviewItemIndex = 0;
[self presentViewController:previewer animated:NO completion:nil];

和 QLPreviewControllerDataSource 方法:

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
}

- (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
    return [NSURL fileURLWithPath:self.pdfUrl];
}

最佳答案

这里可能涉及两件事。

对于那些在 UINavigationController 中实现 QLPreviewController 的人来说,那里可能存在问题。

对于那些在没有 UINavigationController 的情况下仍然遇到问题的人,请继续阅读。

在 iOS 8.0 中,Data 的文件路径已更改。 因此,如果您使用较旧的包路径来访问您的资源,您可能会遇到问题。

我们确实对此进行了调查,结果是:

  • 您需要密切注意获取文档目录完整路径的方式
  • QLPreviewController 无法显示此 Documents 目录的子文件夹中的文件(如果您未创建该文件)。

例如,我们的问题是我们的 PDF 文件是使用传统的“打开方式”从外部应用程序打开的。

这导致文件被复制到应用程序文档目录内的收件箱目录中。

无论 QLPreviewController 是否嵌入到 UINavigationController 中,文件都会在模拟器上正确显示。

该文件在真实的 iOS 设备上显示不正确。

在将文件 URL 发送到 QLPReviewController 之前,我们确实将文件复制到 Documents 目录的根目录,将这个新 URL 传递给 QLPreviewController。 然后是宾果游戏,它成功了。

因此,为了阻止此问题,请确保将资源复制到您实际拥有的目录中。 直到有人可以解释如何使用收件箱(可能是共享的)目录上的权限。

关于ios - Quicklook/QLPreviewController 在 ios 8 上显示空白页面而不是 pdf,但在 iOS7 上工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307326/

相关文章:

css - 如何在将 div 下载为 PDF 时显示一个部分,但将其隐藏在屏幕上

ios - 如何从 firebase 存储 Swift 4 ios 检索图像

ios - 缺少营销图标 Xcode bug?

pdf - TDD和报告的最佳做法

java - 如何在 Android 中将 PDF 页面转换为图像?

ios - [WebActionDisablingCALayerDelegate setBeingRemoved :] 的 UIWebView 引发异常

ios8 - 从另一个应用程序打开 HealthKit 应用程序

ios - 启动时应用程序崩溃

ios - iPhone - 一次性设置屏幕

ios - 如何在 Flutter 中的原生 iOS 代码中使用打印方法?