Swift3文件预览不起作用

时间:2017-01-04 06:19:58

标签: swift swift3 filepath

我觉得Swift内部发生了一些变化,导致我无法预览文件。它以前工作得很好。如果我点击我的应用程序中的PDF文件,我会看到PDF的标题,但PDF(预览)区域的内容不会显示。

以下是我的代码&日志&截图。如果有人知道我可以在哪里解决问题,那么任何帮助将不胜感激。

// When file is clicked this method is called
@objc private func handleTapped() {
guard let url = self.file.fileUrl else { return }

if self.file.isDownloaded {
  self.showDocumentController(url: self.file.urlInDocumentsDirectory! as NSURL)
  return
}

SVProgressHUD.showProgress(0)

let destination: DownloadRequest.DownloadFileDestination = { _, _ in
  let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
  let fileURL = documentsURL.appendingPathComponent("pig.png")
  return (documentsURL, [.removePreviousFile, .createIntermediateDirectories])
}

Alamofire.download(url, to: destination)
  .downloadProgress { (download) in
    DispatchQueue.main.async() {
      SVProgressHUD.showProgress(Float(download.fractionCompleted))
    }
  }.validate(statusCode: 200..<300)
  .response { (response) in
    SVProgressHUD.dismiss()
    guard response.response?.statusCode == 200 else { return }
    let directoryURL = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let pathURL = URL(fileURLWithPath: directoryURL, isDirectory: true)
    //pathURL: file:///var/mobile/Containers/Data/Application/6DDCCC30-107C-4613-B63D-18962C3D06D3/Documents/

    guard let fileName = response.response?.suggestedFilename else { return }
    //fileName: 05_기조강연_RobertMankin_BETTER+OFFICES+GREATER+INNOVATION.pdf

    let fileURL = pathURL.appendingPathComponent(fileName)
    //fileURL: file:///var/mobile/Containers/Data/Application/6DDCCC30-107C-4613-B63D-18962C3D06D3/Documents/05_%E1%84%80%E1%85%B5%E1%84%8C%E1%85%A9%E1%84%80%E1%85%A1%E1%86%BC%E1%84%8B%E1%85%A7%E1%86%AB_RobertMankin_BETTER+OFFICES+GREATER+INNOVATION.pdf
    self.saveFileURL(url: fileURL as NSURL)
    self.showDocumentController(url: fileURL as NSURL)
}
}

private func saveFileURL(url: NSURL) {
self.file.urlInDocumentsDirectory = url as URL
let realm = RealmService.defaultRealm
try! realm?.write {
  realm?.add(self.file, update: true)
}
self.file = self.file.copyFromRealm()
}

private func showDocumentController(url: NSURL) {
let docController = UIDocumentInteractionController(url: url as URL)
docController.delegate = self
docController.presentPreview(animated: true)
}

// MARK: UIDocumentInteractionControllerDelegate methods

func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
if let controller = UIApplication.shared.keyWindow?.topMostViewController() {
return controller
}   
return UIViewController()   
  }

this is how the preview shows

1 个答案:

答案 0 :(得分:-1)

这是守则

import UIKit
import Alamofire

class ViewController: UIViewController, UIWebViewDelegate
{
  @IBOutlet weak var WebView: UIWebView!
  var NewsURL: String = ""

  override func viewDidLoad()
  {
     super.viewDidLoad() 
     Self.LoadPdf()
  }

  func LoadPdf()
  {
    let url = NSURL (string: "\(http://)") //Your Pdf URL Here
    let requestObj = NSURLRequest(URL: url!);
    WebView.loadRequest(requestObj)
  }
}