2

我已经查看了有关QLPreviewController在某些条件下不工作的其他帖子。这个让我受阻:

RHBlobCollection并且RHBlobView是模型/视图对象,它们分别保存了提前缓存的集合和单独的可显示文件。

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 或路径有关,但我的小测试表明一切都是 copasetic。有没有其他人有这个问题?

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 回答