我的应用程序一直在使用QLPreviewController来显示所有类型的文件,并且在iOS 5.x中,似乎这样做还不错。
现在,在iOS 6.0中,我收到一个错误,它显示了控制器,但是具有恒定的加载指示器,并且从未实际加载任何东西。
日志中的错误是:找不到加载的代理的预览项目:
其他人是否对iOS 6.0中的Quicklook有此或其他问题?或有什么建议可以尝试?我已经通过iPhone和iPad尝试过,同时按下了控制器并展示了它。
编辑:还刚刚注意到,所讨论的URL(他们说的是错误的URL)不仅以file://开头,而且以file:// localhost开头,而原始文件只是以实际路径开头(即:file:/ //用户)。
经过一番研究并从头开始创建一个基本的QuickLook查看器,我发现即使实际上是在显示文档,但不是从我的原始项目中看到的,仍然记录了错误。
然后我尝试将QLPreviewController放置在NavigationController中,然后再显示它,并最终出现相同的问题。在呈现它之前,我将QLPreviewController包装在UINavigationController中,因为这似乎是为navigationItem分配自定义按钮的方式。在iOS 5.1(如上所述)中,效果很好,但显然iOS 6.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];
注意:再次,代理错误似乎仍然显示在日志中,但是
还:如果没有NavigationController = /,则任何UIBarButtonItem定制似乎都不再起作用。
更新:我发现使用fileURLWithpath生成PreviewItemAtIndex的fileURL使原来的错误消失了。但是,仍然会在文档无法加载的地方出现相同的问题。
一个新错误(我也见过其他人也有一个错误:
无法发布路径的文件扩展名:/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/339DDF48-AF93-41B5-B81E-A39440A131C6/Documents/temp/Welcome1.docx
最终更新:好的,扩展问题/错误是因为当
[NSString stringByAddingPercentEscapesUsingEncoding]
必须已经处理时,我试图手动将%20添加到空格中(使用[NSURL fileURLWithPath]
等)。一旦我删除了它,它就可以工作了,现在我在iOS 6上了!因此,真正的问题与UINavigationController无关,而实际上是通过PreviewItemAtIndex传递的文件URL。
如果有人遇到相同的问题,我想回答这个老问题。
我从远程网址下载了文件并保存在本地,然后我使用QLPreviewController显示PDF。在iOS 6中,它的工作方式。
1)
这里有一个简单的示例项目:https://github.com/MrThiago/AR-Sample它可以为您提供帮助。