7

私のアプリケーションはQLPreviewControllerを使用してすべてのタイプのファイルを表示しており、iOS5.xでは問題なく表示されているようです。

現在、iOS 6.0でエラーが発生し、コントローラーが表示されますが、一定の読み込みインジケーターが表示され、実際には何も読み込まれません。

ログのエラーは次のとおりです。ロードされたプロキシのプレビューアイテムが見つかりません:<QLPreviewItemProxy:0x8dbf480>-file://localhost/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/E6A58F8D-71F3-4C7A -B16E-4BA017E318E5 / Documents / temp // Welcome.docx

他の誰かがiOS6.0のQuicklookでこれや他の問題を抱えていますか?または何を試すべきかについての提案はありますか?私はiPhoneとiPadを介して、コントローラーを押すこととそれを提示することの両方でそれを試しました。

編集:また、問題のURL(彼らが悪いと言っているもの)はfile://だけでなくfile:// localhostで始まるのに対し、元のファイルは実際のパス(つまり、file:///ユーザー)。

4

4 に答える 4

10

たくさんの調査と基本的なQuickLookビューアをゼロから再作成した後、それでもエラーがログに記録されていることがわかりましたが、実際には元のプロジェクトのものではないドキュメントが表示されていました。

次に、QLPreviewControllerをNavigationController内に配置してから表示しようとしましたが、同じ問題が発生しました。QLPreviewControllerをUINavigationControllerでラップしてから提示しました。これは、navigationItemにカスタムボタンを割り当てる方法のようだったためです。これはiOS5.1(上記のとおり)では正常に機能しましたが、明らかにiOS6.0はこれを好みません。

QLPreviewControllerをUINavigationControllerでラップした余分なコードを削除すると、ドキュメントを表示できるようになりました。

ラップされているコントローラーの例:

QLPreviewController* previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.delegate = self;
[previewer setCurrentPreviewItemIndex:0];

UINavigationController* previewNavCtrl = [[UINavigationController alloc] init];
[previewNavCtrl pushViewController:previewer animated:NO];

[self presentModalViewController:previewNavCtrl animated:YES];

への変更:

QLPreviewController* previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.delegate = self;
[previewer setCurrentPreviewItemIndex:0];

[self presentModalViewController:previewer animated:YES];

注:ここでも、プロキシエラーはログに表示されているようです。

また、UIBarButtonItemのカスタマイズは、NavigationController=/なしでは機能しないようです。

更新:fileURLWithpathを使用してpreviewItemAtIndexのfileURLを生成すると、元のエラーがなくなることがわかりました。ただし、ドキュメントが読み込まれない場合でも同じ問題が発生します。

新しいエラー(他の人にも見られたもの)は次のとおりです。

パスのファイル拡張子を発行できませんでした:/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/339DDF48-AF93-41B5-B81E-A39440A131C6/Documents/temp/Welcome1.docx

最終更新:拡張機能の問題/エラーは、 mustがすでに処理[NSString stringByAddingPercentEscapesUsingEncoding]する必要があるときに、スペースに%20を手動で追加しようとしたためです(などを使用) 。[NSURL fileURLWithPath]それを削除すると、これは機能し、iOS6を使用しています。したがって、実際の問題はUINavigationControllerとは関係ありませんが、実際にはファイルのURLがpreviewItemAtIndexを介して渡されます。

于 2012-10-04T20:46:36.413 に答える
1

誰かが同じ問題に直面した場合、私はこの古い質問に答えようと思いました。

Xcodeを使用してアプリをデバッグする場合、アプリケーションのUUIDが変更されるたびに。ただし、アプリがデバイスから読み込まれている場合、これは適用されません。

例:同じアプリの次のパスを取得しました。

ドキュメントパス:file:/// var / mobile / Applications / CBF533A7-C19A-4336-A92C-DC1A48242A8A / Documents /ドキュメントパス:file:/// var / mobile / Applications / ADB99D3B-EACA-482D-BB8A-0C12B340A044 /ドキュメント/

これは、に以下を追加することで克服できます。- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES ) objectAtIndex:0];
NSURL *localDocumentsDirectoryURL = [NSURL fileURLWithPath:documentsDirectoryPath];
NSURL *fileURL =  [localDocumentsDirectoryURL URLByAppendingPathComponent:fileName isDirectory:NO];
return fileURL;

* fileNameは、Documentフォルダーにあるファイル名(medoc.pdf)です。

于 2014-09-08T11:12:03.500 に答える
0

リモートURLからファイルをダウンロードしてローカルに保存し、QLPreviewControllerを使用してPDFを表示します。iOS6では動作します。

まず、次のコードを使用してリモートURLからファイルを保存しました。

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];


For showing the Pdf :



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





QLPreviewController delegate methods are :




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

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

    return [NSURL fileURLWithPath:local_location];


}
于 2012-12-13T12:18:05.133 に答える
0

1)

NSMutableArray * samplepdf = [[NSMutableArray alloc] initWithObjects:@ "sam1.pdf"、@ "sam2.pdf"、@ "sam3.pdf"、@ "sam4.pdf"、nil];

//強力なtextDocumentディレクトリにPDFファイルをドラッグします

2)

QLPreviewController * PreviewController = [[QLPreviewController alloc] init]; PreviewController.dataSource = self; PreviewController.currentPreviewItemIndex=[indexPath行]; [自己presentModalViewController:previewControllerアニメーション:YES];

3)#pragma mark QLPreviewControllerDataSource

//プレビューコントローラがプレビューする必要のあるアイテムの数を返します

-(NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController {

[samplepdfカウント]を返します。

}

//プレビューコントローラがプレビューする必要があるアイテムを返します

-(id)previewController:(QLPreviewController *)previewController PreviewItemAtIndex:(NSInteger)index {

NSString * documentsDirectoryPath = [[NSBundle mainBundle] resourcePath];

NSString *dataPath =[documentsDirectoryPath stringByAppendingPathComponent:[samplepdf objectAtIndex:index]];

NSURL *url = [NSURL fileURLWithPath:dataPath isDirectory:YES];  
return url;

}

于 2013-01-08T12:51:49.260 に答える