ios - 如何从 Firebase 存储中查看 PDF - SwiftUI PDFVIEW
问题描述
我在尝试在我的 SwiftUI 应用程序中显示存储在 Firebase Storage 中的 PDF 时遇到一些问题。
我已成功完成以下工作;
- 将 PDF 文件上传到 Firebase 存储
URL
从目录路径获取- 创建一个
PDFView
并通过URL
目前PDFKITVIEW
出现但没有任何显示,也没有错误。我错过了什么?
显示 PDFKITVIEW
.sheet(isPresented: $isShowingDoc) {
PDFKitView(path: model.object.docURL) // Path to firebase storage is correct
}
PDFKITVIEW
import SwiftUI
import PDFKit
struct PDFKitView : UIViewRepresentable {
private var url: URL?
init(path: String) {
// Get url from path
let dm = DataManager()
url = dm.urlForDocPath(path: path)
}
func makeUIView(context: Context) -> UIView {
let pdfView = PDFView()
if let url = url {
pdfView.document = PDFDocument(url: url)
}
return pdfView
}
func updateUIView(_ uiView: UIView, context: Context) {
// Empty
}
}
数据管理器
func getURLFromFirestore(path: String, success:@escaping (_ docURL:URL)->(),failure:@escaping (_ error:Error)->()){
let storage = Storage.storage().reference(withPath: path)
storage.downloadURL { (url, error) in
if let _error = error{
print(_error)
failure(_error)
} else {
if let docURL = url {
success(docURL)
}
}
}
}
func urlForDocPath(path: String) -> URL? {
var url: URL?
getURLFromFirestore(path: path, success: { (docURL) in
url = docURL
}) { (error) in
print(error)
}
return url
}
解决方案
我不能将此作为评论发布,因为我没有足够的声誉这样做,但似乎问题可能出在您的 urlForDocPath 函数中,该函数尝试执行异步操作但同步返回。
你能检查一下PDFKitView上的url是否不为零吗?因为如果是这样,它将证明我的观点。
尚未在 Xcode 中尝试过,但需要如下所示:
func urlForDocPath(path: String, success: @escaping (_ docURL:URL?)->(), failure: @escaping (_ error:Error)->()) {
var url: URL?
getURLFromFirestore(path: path, success: { (docURL) in
success(docURL)
}) { (error) in
failure(error)
}
}