2011-05-05 109 views
0

我正在使用QLPreviewController从我的服务器获取并查看远程PDF。这个效果非常好,因为苹果在文件下载时内置了一个很好的“加载”图形。现在,我还想使用需要本地文件的UIDocumentInteractionController。但是,由于QLPreviewController已经下载了该文件,我想使用它。QLPreviewController:临时文件位于何处?

有没有办法让QLPreviewController下载的文件的本地路径?

QLPreviewController *previewController = [[QLPreviewController alloc] init]; 
previewController.dataSource = self; 
previewController.delegate = self; 
previewController.currentPreviewItemIndex = 0; 
[[self navigationController] pushViewController:previewController animated:YES]; 
[previewController release]; 
// Where is the file stored? 
+0

你怎么使用QLPreviewController获取远程PDF在方法“previewItemAt” – 2017-01-17 14:18:10

回答

1

QLPreviewController是不是真的设计下载文件 - 从文档QLPreviewItem

@property (readonly) NSURL *previewItemURL;

该属性用于通过快速查找 预览控制器获得一个项目的 URL。在典型使用中,您需要 在 预览项目类中实施一个获取方法,以提供此 值。

此属性的值必须是文件类型的URL。

所以你真的应该使用别的东西来下载文件。它可能与网络资源一起工作,但它并非设计用于真正使用它。甚至不知道你是如何管理它的,因为我确信如果你没有传递文件URL,QuickLookController会报错。控制器很可能将文件下载到临时目录,或直接下载到内存。无论哪种方式,它都不适合您使用。

您应该自己下载文件,然后将Quick Look控制器传递给指向它的文件URL。如果你想让你更容易,你可以使用像ASIHTTP这样的网络库。

+0

对不起,使之达到后近2个月,但我坚持了同样的问题,我试图用UIDocumentInteractionController,但我可以只通过模态显示。 QLPreviewController有一个属性'currentPreviewItem',但它只是返回一个QLPreviewItem女巫有一个URL,但这不是本地..我已经考虑过你的答案,但我想在加载文件时与工具栏进行交互。有小费吗? – Justin 2011-08-22 13:55:48

+0

正如我所提到的,你要使用内建的API(如'NSURLConnection')或第三方库(如'ASIHTTPRequest')来异步下载文件(在后台),然后只尝试并在文件下载到手机内存后打开文件。如果您异步下载,则不会阻止用户交互。 – lxt 2011-08-22 14:37:02

3

我们有一个类似的场景,其中要显示的文件是远程的。以下是我们所做的:我们将数据源设置为零。它所做的是显示一个加载图标。在viewDidLoad中,我们初始化远程请求并在本地保存文件。文件下载完成后,我们正确设置数据源并刷新视图。

//after file has been downloaded 
[self setDataSource:self]; 
[self reloadData];