我正在尝试在 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/