我使用Xcode 8.0
得到这种行为。问题是,在下载文件并将其存储在文档目录(下面提供的代码)后,QLPreviewController
仅显示文档的名称和大小。 currentPreviewItem属性返回正确的路径文档。更奇怪的是,如果我尝试从我的应用程序中的另一个控制器打开该文档,它可以正常工作。我已经实现了QLPreviewControllerDelegate和QLPreviewControllerDataSource。
下载和保存文档的代码:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSURL *url = [NSURL URLWithString:file[@"url"]];
NSData *data = [NSData dataWithContentsOfURL:url];
if (!data) {
completion([NSError new]);
return;
}
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:AppName];
path = [path stringByAppendingPathComponent:file[@"name"]];
file[@"filePath"] = [NSURL fileURLWithPath:path];
dispatch_async(dispatch_get_main_queue(), ^{
[[NSFileManager defaultManager] createFileAtPath:path contents:data attributes:nil];
completion(nil);
});
});
然后,当用户选择文档时,我使用保存在@“filePath”上的内容来显示QLPreviewController
。我试过推动它并以模态方式呈现它,在这两种情况下它只显示一个带有文档名称和大小的灰色页面。
文件未显示,因为下载的内容不包含文件的扩展名。当我尝试在其他控制器中打开它时,它工作,因为我临时使用包含正确扩展名的另一个文件名。所以我解决了将扩展名.pdf添加到未包含它的下载文件的问题。这使得QLViewController正确显示了该文件。
在我的例子中,使用正确的名称创建了一个文件,但该文件包含来自服务器的错误消息,因此不代表预期的文件结构。