iOS 6.0 Quicklook QLPreviewController错误与:“无法find加载的代理预览项目”

我的应用程序已经使用QLPreviewController来显示所有types的文件,并在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中都有这个或其他问题? 或有什么build议尝试? 我已经通过iPhone和iPad试了一下,同时推控制器和呈现它。

编辑:也只是注意到,问题的url(他们说的是坏的)开始不只是文件:/ /文件:/ /本地,而原始文件刚开始与实际path(即:文件:/ /用户)。

经过大量的研究和重新创build一个基本的QuickLook查看器后,我发现这个错误仍然被logging下来,但是这些文档实际上是显示出来的,而这些文档并不是来自我原来的项目。

然后,我试着把QLPreviewController放在一个NavigationController里面,然后出现在同一个问题上。 在呈现之前,我将QLPreviewController封装在UINavigationController中,因为这似乎是为navigationItem分配一个自定义button的方式。 这在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]; 

改成:

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

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

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

更新:我发现使用fileURLWithpath生成fileItemItemAtIndex fileURL使原来的错误消失。 但是,同样的问题仍然发生在文档不会加载的位置。

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

无法为path发出文件扩展名:/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耶! 所以真正的问题与UINavigationController无关,而是实际上通过previewItemAtIndex传递的文件URL。

如果有人面临同样的问题,我想回答这个老问题。

当您使用Xcodedebugging应用程序时,应用程序的UUID每次都在变化。 但是,当从应用程序加载应用程序时,这是不适用的。

例如:我有相同的应用程序的path。

文件path:file:/// var / mobile / Applications / CBF533A7-C19A-4336-A92C-DC1A48242A8A / Documents / Documentpath:file:/// var / mobile / Applications / ADB99D3B-EACA-482D-BB8A-0C12B340A044 /文件/

这可以通过添加以下在- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index

 NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES ) objectAtIndex:0]; NSURL *localDocumentsDirectoryURL = [NSURL fileURLWithPath:documentsDirectoryPath]; NSURL *fileURL = [localDocumentsDirectoryURL URLByAppendingPathComponent:fileName isDirectory:NO]; return fileURL; 

*文件名只是文件名(medoc.pdf),你可以在文件夹上find。

我从远程URL下载文件并保存在本地,然后使用QLPreviewController显示PDF。在iOS 6中工作。

首先我使用下面的代码保存远程URL的文件:

 NSString *local_location; NSString *path = [[NSBundle mainBundle] pathForResource:@"sampleData" ofType:@"plist"]; path = NSTemporaryDirectory(); local_location= [path stringByAppendingPathComponent:[NSString stringWithFormat:@"My_Invoice.pdf"]]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString: remoteurl]]; [request setDownloadDestinationPath:local_location]; [request startSynchronous]; For showing the Pdf : QLPreviewController* preview = [[QLPreviewController alloc] init]; preview.dataSource = self; [self presentModalViewController:preview animated:YES]; QLPreviewController delegate methods are : - (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return 1; } - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index { return [NSURL fileURLWithPath:local_location]; } 

1)

NSMutableArray * samplepdf = [[NSMutableArray alloc] initWithObjects:@“sam1.pdf”,@“sam2.pdf”,@“sam3.pdf”,@“sam4.pdf”,nil];

//在strong textDocument目录中拖动pdf文件

2)

QLPreviewController * previewController = [[QLPreviewController alloc] init]; previewController.dataSource = self; previewController.currentPreviewItemIndex = [indexPath row]; [self presentModalViewController:previewController animated:YES];

3)#pragma标记QLPreviewControllerDataSource

//返回预览控制器应预览的项目数量

– (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController {

return [samplepdf count];

}

//返回预览控制器应该预览的项目

– (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index {

NSString * documentsDirectoryPath = [[NSBundle mainBundle] resourcePath];

 NSString *dataPath =[documentsDirectoryPath stringByAppendingPathComponent:[samplepdf objectAtIndex:index]]; NSURL *url = [NSURL fileURLWithPath:dataPath isDirectory:YES]; return url; 

}