【问题标题】:can't create PDFDocument(url: url) with local url in SwiftUI无法在 SwiftUI 中使用本地 url 创建 PDFDocument(url: url)
【发布时间】:2021-10-23 16:46:25
【问题描述】:

我使用 .fileImporter 将 pdf url 从本地设备导入到我的 swiftui 应用程序中。现在我想转换为数据并保存。

.fileImporter(isPresented: $isPresented, allowedContentTypes: [.pdf]) { result in
    switch result {
    case .success(let url):
        if let pDFDocument = PDFDocument(url: url) {
            // this is nil
            if let data = pDFDocument.dataRepresentation() {
                // save data
            }
        }
    case .failure(let error):
        print(error)
    }
}

但是这不起作用。尽管文件刚刚从 .fileImporter 中选取,但 PDFDocument(url: url) 为 nil。网址遵循以下模式:

file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/Documents/etc...

我猜是私有阻止访问?如果是这样,我怎样才能将 pdf 文件放入我的应用程序并使用它?

我想知道如何让它工作

【问题讨论】:

    标签: ios swift xcode swiftui pdfkit


    【解决方案1】:

    使用 startAccessingSecurityScopedResource() 为我解决了这个问题:

    .fileImporter(isPresented: $isPresented, allowedContentTypes: [.pdf]) { result in
        switch result {
        case .success(let url):
            url.startAccessingSecurityScopedResource()
            if let pDFDocument = PDFDocument(url: url) {
                // this is nil
                if let data = pDFDocument.dataRepresentation() {
                    // save data
                }
            }
        case .failure(let error):
            print(error)
        }
    }
    

    https://developer.apple.com/documentation/foundation/nsurl/1417051-startaccessingsecurityscopedreso

    【讨论】:

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