繁体   English   中英

无法在 SwiftUI 中使用本地 url 创建 PDFDocument(url: url)

[英]can't create PDFDocument(url: url) with local url in SwiftUI

我使用 .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)
    }
}

然而,这是行不通的。 PDFDocument(url: url) 为 nil,尽管文件刚刚从 .fileImporter 中选取。 url 遵循以下模式:

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

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

我想知道如何让它工作

使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM