2

QLPreviewController特定の条件下で動作しないことに関する他の投稿を確認しました。これは私を困惑させました:

RHBlobCollectionRHBlobViewは、事前にキャッシュされたコレクションと個々の表示可能なファイルをそれぞれ保持するモデル/ビュー オブジェクトです。

RHBlobView.m:

    - (IBAction) handleBlobTap:(UITapGestureRecognizer *)sender
    {
        QLPreviewController *previewController = [[QLPreviewController alloc] init];

        // view tag is index in array of blobs
        [previewController setCurrentPreviewItemIndex:self.tag];

        // blobContainer is type RHBlobCollection
        [previewController setDataSource:self.blobContainer];

        UINavigationController *navController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];
        [navController pushViewController:previewController animated:YES];

    }

RHBlobCollection.m:

    - (NSInteger) numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
    {
        return [self.blobs count];
    }

    - (id <QLPreviewItem>) previewController:(QLPreviewController *)controller
                          previewItemAtIndex:(NSInteger)index
    {
        RHBlobView *blob = self.blobs[(NSUInteger) index];

        NSURL *fileURL = [RHCacheManager cachedFileURLForFilename:blob.filename withKey:blob.blobID];

        // URL proper?
        BOOL __unused proof1 = [fileURL isFileURL];

        // QLPreviewController can stomach it?
        BOOL __unused proof2 = [QLPreviewController canPreviewItem:fileURL];

        // Cached file actually exists?
        NSString *proof3path = [[fileURL resourceSpecifier] stringByReplacingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding];
        BOOL __unused proof3 = [[NSFileManager defaultManager] fileExistsAtPath:proof3path];

        // Unless we're dealing with thumbnails, we're done. Return the URL of the resource.
        if ( ! [blob hasThumbnails] )
        {
            return fileURL;
        }

        // Process thumbnails into .pdf file for display...

proof1proof2およびproof3すべてが返されYESます。別の概念実証プロジェクトに引き出され、QLPreviewController想定どおりに機能します。ただし、私の完全なアプリ プロジェクトでは、iOS 6 で動作しますが、iOS 7 ではスピナーを使用して "読み込み中..." でハングします。

私の直感では、不正な形式のファイル URL またはパスと関係があるはずですが、私の小さなテストでは、すべてが無秩序であることが示されています。他の誰かがこれに問題を抱えていますか?

4

2 に答える 2

1

私は同意します 6 の下では previewItemAtIndex インデックスは > 0 ですが、7 ではインデックスはカウントに関係なく常に -1 です 確認できますか?

于 2013-10-08T12:39:15.717 に答える
1

完全を期すために、私は問題を見つけました。私は実際には のサブクラスを使用していました。NSURLこれは、人間が読めるドキュメントのタイトル ( ) に別の文字列を追加しただけの単純な作業ですpreviewItemTitle。に戻すとNSURL、動作が始まりました。いくつかの奇妙なファイル名の醜いタイトルですが、少なくとも表示されます。その問題を処理する方法について、製図板に戻ります...

于 2013-11-10T20:49:56.353 に答える