从UIDocumentPicker获取的本地URL在2或3分钟后不起作用



我有两个问题,在谷歌上搜索 5 天后无法找到答案。

  1. uidocumentpicker的帮助下,我曾经访问过这些文件并选择了一个pdf文档。 在didpicdocuments方法的帮助下选择 pdf 后,我得到了 pdf 的 URL 并将其存储到数组中。并在表格视图中显示一行,其中包含该 PDF 的名称。现在,当用户单击该行时,pdf 在pdfkit的帮助下打开该行以及存储在该数组中的 URL。到目前为止,一切正常。现在的问题是两三分钟后,当我再次点击该行时,它没有打开该pdf,它只打开了一个空白pdfview

  2. 打开选择 pdf 时,我只想选择 pdf 文件,
  3. 而不是其他文件,为此,我使用了移动核心服务,并在文档选择器的文档类型中提到了 pdf 类型。 但即使在它之后它也无法工作 我也无法选择 pdf 文件。

谢谢

func didSelectDocument(doc: String?) {
let importMenu = UIDocumentPickerViewController(documentTypes: [String("kUTTypePDF")], in: .import)
importMenu.delegate = self
//importMenu.allowsMultipleSelection = true
importMenu.modalPresentationStyle = .formSheet
self.present(importMenu, animated: true, completion: nil)
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
if let url = urls.first {
urlArray.append(url)
}
}

用于打开 pdf

let vc = UIViewController()
vc.view.backgroundColor = .white
let pdfView = PDFView(frame: CGRect(x: 0, y: 0, width: vc.view.frame.width, height: vc.view.frame.height))
let pdfDocument2 = pdfDocuments[indexPath.row-(imageSelected.count)]
pdfView.displayMode = .singlePageContinuous
pdfView.autoScales = true
pdfView.document = pdfDocument2.pdf
vc.view.addSubview(pdfView)
navigationController?.pushViewController(vc, animated: true)

您无法保存它们。URL 是沙盒中的暂时性漏洞。来自UIDocumentPickerViewController的文档

不要保存打开和移动操作提供的 URL。但是,您可以将书签保存到这些 URL。调用 bookmarkData(options:includeResourceValuesForKeys:relativeTo:( 方法并传入 withSecurityScope 选项,创建一个包含安全范围 URL 的书签。

您需要保存一个安全范围的书签,该书签本质上是一团Data

沃伦的回答涵盖了这个理论。下面是一些代码:

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard
let url = urls.first,
url.startAccessingSecurityScopedResource()
else {
return
}
defer { url.stopAccessingSecurityScopedResource() }
do {
let data = try Data(contentsOf: url)
print(data)
//DO SMTH WITH YOUR DATA
} catch {
print(error)
}
}

最新更新