Я пытаюсь разрешить просмотр PDF в приложении с помощью PDFKit и использую DocumentPicker, чтобы пользователь мог выбрать, какой PDF он хотел бы просмотреть. Конечной целью будет получение URL PDF из базы данных, чтобы файлы не сохранялись локально. Однако PDFView будет пустым при выборе файла с помощью DocumentPicker. Единственные различия, которые я вижу между путями, кажутся подписью .tmp, и я не был уверен, что именно это мешает отображению документа. file:///private/var/mobile/Containers/Data/Application/[Device]/tmp/com.company.app-Inbox/Welcome.pdf
на пути, по которому я читаю или выбран, и это путь, который должен отображаться в PDFView file:///var/mobile/Containers/Data/Application/[Device]/Documents/Welcome.pdf
. Я использую кнопку, чтобы войти в средство выбора документов, а затем вызвать переход к PFDView.
var urlPath: URL!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
let pdfView = PDFView(frame: self.view.bounds)
self.view.addSubview(pdfView)
let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let sandboxUrl = dir.appendingPathComponent(urlPath.lastPathComponent)
if !FileManager.default.fileExists(atPath: sandboxUrl.path) {
do {
try FileManager.default.copyItem(at: urlPath, to: sandboxUrl)
} catch {
print("error copying")
}
} else {
}
print("here is the urlpath: \(urlPath!.absoluteString)")
print("here is the pdfpath: \(sandboxUrl)")
pdfView.translatesAutoresizingMaskIntoConstraints = false
// view.addSubview(pdfView)
pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
guard let path = Bundle.main.url(forResource: sandboxUrl.absoluteString, withExtension: "pdf") else { return }
if let document = PDFDocument(url: path) {
pdfView.document = document
}
}
}```