は、悲しいことに、それは不可能です
import UIKit
import QuickLook
class YourViewController:UIViewController,QLPreviewControllerDataSource, QLPreviewControllerDelegate {
func openFile(){
let objURL = "file URL "
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = URL(fileURLWithPath: path)
let theFileName = (objURL as NSString).lastPathComponent
let filePath = url.appendingPathComponent("\(theFileName)").path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
print("FILE AVAILABLE")
self.pathString = filePath
let viewPDF = QLPreviewController()
viewPDF.dataSource = self
viewPDF.delegate = self
self.item.previewItemTitle = self.previewFileTitle
self.item.previewItemURL = URL.init(fileURLWithPath: filePath)
self.present(viewPDF, animated: true, completion: nil)
} else {
print("FILE NOT AVAILABLE")
previewFileTitle = theFileName
self.downloadPDF(objURL)
}
}
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
let url = URL(fileURLWithPath: pathString)
return item as QLPreviewItem
}
func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool {
return true
}
func downloadPDF(_ url:String){
let requestURL: URL = URL(string: url)!
let urlRequest: URLRequest = URLRequest(url: requestURL)
let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if let httpResponse = response as? HTTPURLResponse {
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("Downloaded Successfully")
let documentsDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let sourceUrl = URL(string:url)!
//Get the file name and create a destination URL
let fileName = sourceUrl.lastPathComponent
let destinationURL = documentsDirectoryUrl!.appendingPathComponent(fileName)
//Hold this file as an NSData and write it to the new location
if let fileData = try? Data(contentsOf: sourceUrl) {
try? fileData.write(to: destinationURL, options: []) // true
print(destinationURL.path)
self.pathString = destinationURL.path
let viewPDF = QLPreviewController()
viewPDF.dataSource = self
viewPDF.delegate = self
self.item.previewItemTitle = self.previewFileTitle
self.item.previewItemURL = destinationURL
self.present(viewPDF, animated: true, completion: nil)
}
}else{
}
}
}
task.resume()
}
}
class PreviewItem: NSObject, QLPreviewItem {
var previewItemURL: URL?
var previewItemTitle: String?
}
Developer documentation
See this tutorial
、使用してみてください。私はかなりの時間のための解決策を探しました。問題は、UIDocumentInteractionControllerがローカルファイルURLだけを受け入れることです。 –
しかし、あなたがNSTemporaryDirectoryを使用することは許されていますか? –