2012-09-28 14 views
11

iOS 6では、QLPreviewControllerはURLからPDFを読み込まなくなりました。これはiOS 5でうまく動作します。hereとしてQLPreviewControllerDataSourceメソッドを実装しました。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の6で、コンソール出力のiOS 5に完璧に動作します:

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

実際にローカルファイルURLを使用する必要はありませんか?リモートURLを使用しているようで、http:// host /部分の後ろのすべてでエラーが発生しているように見えます。 – 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 

UPDATE:私は、Appleがこの問題に対処してバグを開きましたiOS 6の場合、バグとして報告されているようですので、近いうちに修正が提供される可能性があります。私がオープンしたバグは、プレビューにカスタムNSURLProtocolsを使用することと関係がありましたが、他の側面にも適用される可能性があります。

Link to class

+0

Appleからのアップデートはまだありませんでしたが、UIWebViewを使用して作業し、ファイルをロードするためにurlprotocolをオーバーライドすることができました – MikeIsrael

7

私はその後、私はQLPreviewController .INのiOS 6の作業を使用してPDFを表示すると、リモートのURLからファイルをダウンロードし、ローカルに保存されました。 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によっては存在しません。したがって、ファイルをダウンロードして、間違ったURLをQLPreviewControllerに渡すと、同じエラーが発生します。どうしてそうするか ?まあ愚かなバグが起こる... –

+0

@SébastienNussbaumer私は私のプロジェクトでこのエラーを取得しませんでした。一度あなたのパスをチェックしてください。 – Suresh

+1

申し訳ありません私はこのことがあなたのプロジェクトで起こったとは言いませんでした。ちょうどそれが私の中で起こっていて、他の読者にそのファイルが存在するかどうかチェックすることをお勧めしたいと思っていました。 –

0

しかしノートそのQLPreviewControllerはローカルリソースへのURLを期待します

まず、PDFファイルをローカルにダウンロードして保存してから、ローカルファイルへの適切なファイルURLを作成する必要があります。

関連する問題