【问题标题】:QLPreviewController not displays saved fileQLPreviewController 不显示保存的文件
【发布时间】:2016-09-27 21:42:05
【问题描述】:

我使用Xcode 8.0 得到了这种行为。问题是,在下载文件并将其存储在文档目录(下面提供的代码)后,QLPreviewController 仅显示文档的名称和大小。 currentPreviewItem 属性返回正确的路径文档。更奇怪的是,如果我尝试从我的应用程序中的另一个控制器打开该文档,它工作正常。我已经实现了 QLPreviewControllerDelegateQLPreviewControllerDataSource

文件下载保存代码:

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。我尝试过推送它并以模态方式呈现它,在这两种情况下它都只显示一个带有文档名称和大小的灰色页面。

【问题讨论】:

  • 你能把你的项目上传到github吗?让我知道细节,谢谢。
  • @QQ726535609 你好,我不能分享这个项目,因为它不是个人的。但是,如果您能告诉我您需要哪些信息,我会提供给您。谢谢!
  • 如果您确定下载的内容是有效的,您可能应该在 bugreport.apple.com 上提交一份雷达报告
  • 文件的扩展名是什么?
  • @ThomasDeniau 显然这就是问题所在。某些下载的文件在文件名中不包含其扩展名,因此 QLViewController 无法打开该文件。如果我手动添加扩展名,文件会正确显示。

标签: ios objective-c quicklook qlpreviewcontroller


【解决方案1】:

文件未显示,因为下载的内容不包含文件扩展名。当我尝试在其他控制器中打开它时,它起作用了,因为我临时使用了另一个包含正确扩展名的文件名。所以我解决了将扩展名 .pdf 添加到不包含它的下载文件的问题。这使得 QLViewController 可以正确显示文件。

【讨论】:

    【解决方案2】:

    在我的例子中,创建了一个具有正确名称的文件,但该文件包含来自服务器的错误消息,因此不代表预期的文件结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多