2

我们有一个应用程序,其捆绑包中包含一堆 PDF。当用户点击按钮或选择表格单元格时,我们希望在 UIDocumentInteractionController 中显示相应的 PDF。

这在我的机器和大多数测试机器上都很好用,但是我有一个用户在他的 iPhone 上看不到任何预览。他给我发了一个屏幕截图;控制器已将其视图推送到导航堆栈上,并且在导航栏中有一个有效的“操作”菜单,在正确的文件名旁边。但是应该显示 PDF 本身的大空间只是深灰色。

那是在运行 6.0.1 的新 iPhone 上;在他的 iPad 上,同样运行 6.0.1,它运行良好;在我运行 5.0.1 的 iPhone 4S 上,它运行良好。“工作正常”意味着它推送完全相同的周围细节,包括文件名和操作菜单,但不是一个大的灰色空间,而是 PDF 的工作预览。

我的视图控制器层次结构由一个选项卡控制器组成,在每个选项卡中,一个导航控制器。同样的问题存在于导航堆栈深处的几个级别的表视图中,或者来自导航堆栈顶层的 HTML 视图中。呈现控制器的代码如下所示:

        self.DIC = [UIDocumentInteractionController interactionControllerWithURL:url];
        self.DIC.delegate = self;
        [self.DIC presentPreviewAnimated:YES];

唯一实现的委托方法是:

- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller {
    if (curTabViewController) return curTabViewController;
    return tabCtrl;
}

这将返回我在 tabBarController:didSelectViewController 中设置的当前导航视图控制器。我可以说这是有效的,因为 DIC 已将其视图推送到导航堆栈上,而不是模态弹出。

所以。知道为什么 UIDocumentInteractionController 无法在某些设备上而不是其他设备上绘制预览吗?

更新:我已经成功地设置了这个设备进行调试。日志文件中出现的唯一线索是这个错误:

Cannot find preview item for loaded proxy: <QLPreviewItemProxy: 0x1fd67820> - 
file://localhost/var/mobile/Applications/22DDE4EB-6FB6-4364-87D6-E3680E1E1A9B
/agilentJAL.app/BuiltInFiles/help/Getting_Started.pdf

我搜索了互联网,发现了这个问题,但它似乎不适用于我的情况。我已经仔细检查了路径,它看起来是正确的(并且 DIC 菜单可以成功地通过电子邮件发送文档,在 DropBox 中打开它等)知道还有什么可能导致这个错误吗?

4

1 回答 1

0

尝试访问导航控制器而不是标签栏。这为我解决了这个问题。在 documentInteractionControllerViewControllerForPreview 中:​

if let navigationController = self.navigationController {
    return navigationController
} else {
    return self
}
于 2016-05-04T12:05:17.857 回答