2011-05-05 111 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];