2012-09-28 87 views
11

在iOS 6中,QLPreviewController不再從URL加載PDF。它在iOS 5中正常工作。我已經實現了QLPreviewControllerDataSource方法,如here所述。QLPreviewController無法在iOS 6中工作

#pragma mark - QLPreviewControllerDataSource 
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller { 
    return 1; 
} 

- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index; 
{ 
    NSURL *fileURL = [NSURL URLWithString:@"http://www.bliley.net/XTAL/PDF_Instructions/Test_File.pdf"]; 
    return fileURL; 
} 

這工作完全在iOS 5中,不過在iOS 6中的控制檯輸出:

Couldn't issue file extension for path: /XTAL/PDF_Instructions/Test_File.pdf 
+0

它不是實際上需要使用本地文件的URL嗎?它看起來像你使用的是遠程URL,並且它與http://主機/部分之後的所有內容都出錯。 – valheru

+0

有人告訴我,在ios 6中,他們對這種方法實施了更嚴格的檢查,即URL最開始於'file://',但我無法在其上找到任何文檔。如果有人知道參考,請發佈。 – MikeIsrael

+0

您是否找到解決方案?如果是這樣,請分享或接受答案。謝謝 –

回答

8

您是否嘗試過使用fileURLWithPath代替URLWithString?我還有其他問題通過這樣做得到解決。

還不確定QLPreviewController是否會處理遠程URL。如果沒有,你可以下載文件然後顯示它。

+1

fileURLWithPath解決了我的問題!謝謝! –

+0

我已經在App Store中有一個應用程序。它在iOS 5中工作正常。但它不再工作。我需要改變一切,使其工作?蘋果公司實現了什麼樣的「升級」。 –

4

我有一個類似的問題,似乎像它可能從QLPreviewItem

的文件類型URL的執行力度,遏制
@property (readonly) NSURL *previewItemURL; 
Discussion 
This property is used by a Quick Look preview controller to get an item’s URL. In typical use, you would implement a getter method in your preview item class to provide this value. 

The value of this property must be a file-type URL. 

If the item is not available for preview, this property’s getter method should return nil. In this case, the Quick Look preview controller displays a 「loading」 view. 

Availability 
Available in iOS 4.0 and later. 
Declared In 
QLPreviewItem.h 

更新:我已經開了一個bug與蘋果處理這個問題對於iOS 6而言,它似乎已經將它視爲一個bug,因此可能會在不久的將來提供修復。我打開的錯誤與使用自定義NSURLProtocols進行預覽有關,但也可能適用於其他方面。

Link to class

+0

蘋果仍然沒有更新,但能夠得到工作使用UIWebView和重寫urlprotocol加載文件 – MikeIsrael

7

我從網上下載遠程URL文件並保存到本地,然後我顯示使用QLPreviewController。在iOS 6中其工作的PDF。

NSString *local_location; 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"sampleData" ofType:@"plist"]; 
     path = NSTemporaryDirectory(); 
    local_location= [path stringByAppendingPathComponent:[NSString stringWithFormat:@"My_Invoice.pdf"]]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString: remoteurl]]; 
     [request setDownloadDestinationPath:local_location]; 
     [request startSynchronous]; 

用於顯示全文:

首先,我用下面的代碼保存從遠程URL文件

QLPreviewController* preview = [[QLPreviewController alloc] init]; 
     preview.dataSource = self; 
     [self presentModalViewController:preview animated:YES]; 

QLPreviewController委託方法是:

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

- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index 
{ 

    return [NSURL fileURLWithPath:local_location]; 


} 
+2

只是我的兩分錢:如果文件指出,您還可以得到「無法發送路徑的文件擴展名」錯誤由URL不存在。所以,如果你下載文件,然後給QLPreviewController一個錯誤的URL,你會得到同樣的錯誤。爲什麼要這麼做 ?那麼愚蠢的錯誤會發生... –

+0

@SébastienNussbaumer我沒有在我的項目中得到這個錯誤。一旦檢查你的路徑。 – Suresh

+1

對不起,我不是故意說這發生在你的項目中,只是發生在我的項目中,並希望讓其他讀者知道檢查該文件是否是一個好主意:) –

0

不過需要注意的QLPreviewController預計到本地資源的URL

您需要首先在本地下載並保存PDF文件,然後爲本地文件創建適當的文件URL。

相關問題