QLPreviewController适用于iOS 6;不在iOS 7上

时间:2013-09-26 15:29:17

标签: ios ios7 qlpreviewcontroller

我查看过有关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...

proof1proof2proof3都返回YES。匆匆进入一个单独的概念验证项目,QLPreviewController按照预期进行。但是,在我的完整应用程序项目中,它可以在iOS 6下运行,但在iOS 7下使用微调器挂起“正在加载...”。

我的直觉告诉我它应该与格式错误的文件URL或路径有关,但我的小测试显示一切都是copasetic。还有其他人有这个问题吗?

2 个答案:

答案 0 :(得分:1)

我同意 在6下,previewItemAtIndex索引是&gt; 0 而无论计数如何,7指数始终为-1 你能证实吗?

答案 1 :(得分:1)

为了完整起见,我发现了这个问题。我实际上正在使用NSURL的子类,这是一个简单的事情,它为人类可读的文档标题(previewItemTitle)添加了一个单独的字符串。当我把事情改回NSURL时,事情就开始起作用了。一些奇怪的文件名的丑陋标题,但至少它们出现了。回到绘图板,了解如何处理这个问题...