iOS 6.0 Quicklook QLPreviewController错误:"无法找到已加载代理的预览项"

val*_*eru 6 objective-c quicklook ios qlpreviewcontroller ios6

我的应用程序一直在使用QLPreviewController来显示所有类型的文件,在iOS 5.x中,它似乎很好.

现在,在iOS 6.0中,我收到一个错误,它显示了控制器,但有一个恒定的加载指示器,从来没有实际加载任何东西.

日志中的错误是:找不到已加载代理的预览项:<QLPreviewItemProxy:0x8dbf480> - file://localhost/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/E6A58F8D-71F3-4C7A -B16E-4BA017E318E5 /文档/温度// Welcome.docx

其他人在iOS 6.0中遇到此问题或其他问题吗?或者有什么尝试的建议?我已经通过iPhone和iPad尝试了它,同时推动控制器并呈现它.

编辑:还注意到有问题的URL(他们说的那个是坏的)不仅以file://而是file:// localhost开头,而原始文件只是以实际路径开始(即:file:///用户).

val*_*eru 10

在经过一系列研究并从头开始重新创建一个基本的QuickLook查看器之后,我发现错误仍然记录在那里,但实际上正在显示文档,而这些文档并非来自我的原始项目.

然后我尝试将QLPreviewController放在NavigationController中,然后再呈现它并最终遇到同样的问题.我在呈现它之前将QLPreviewController包装在UINavigationController中,因为这似乎是为navigationItem分配自定义按钮的方法.这在iOS 5.1中运行良好(如上所述),但显然iOS 6.0不喜欢这样.

删除在UINavigationController中包装QLPreviewController的额外代码似乎允许显示文档.

被包裹的控制器示例:

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];
Run Code Online (Sandbox Code Playgroud)

改成:

QLPreviewController* previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.delegate = self;
[previewer setCurrentPreviewItemIndex:0];

[self presentModalViewController:previewer animated:YES];
Run Code Online (Sandbox Code Playgroud)

注意:然而,代理错误似乎仍然显示在日志中

另外:没有NavigationController = /任何UIBarButtonItem自定义似乎不再有效

更新:我发现使用fileURLWithpath为previewItemAtIndex生成fileURL使原始错误消失.但是,仍然会出现相同的问题,无法加载文档.

一个新的错误(我见过其他人也有):

无法为路径发出文件扩展名:/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/339DDF48-AF93-41B5-B81E-A39440A131C6/Documents/temp/Welcome1.docx

最后更新:好的扩展问题/错误是因为我在尝试手动将%20添加到空间(使用[NSString stringByAddingPercentEscapesUsingEncoding]等)时[NSURL fileURLWithPath]必须处理.一旦我删除它,这工作,我现在在iOS 6 yay!所以真正的问题与UINavigationController无关,但实际上是通过previewItemAtIndex传递的文件URL.