如何从 Firebase 存储中查看 PDF - SwiftUI PDFVIEW
How to view PDF from Firebase Storage - SwiftUI PDFVIEW
我在尝试在我的 SwiftUI 应用程序中显示存储在 Firebase 存储中的 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
}
}
DataManager
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
}
我不能 post 这作为评论,因为我没有足够的声誉来这样做,但似乎问题可能出在你的 urlForDocPath 函数中,它试图执行异步操作但同步返回。
你能检查 PDFKitView 上的 url 是否不为 nil 吗?因为如果是的话,就证明了我的观点。
尚未在 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)
}
}
我在尝试在我的 SwiftUI 应用程序中显示存储在 Firebase 存储中的 PDF 时遇到一些问题。
我已成功完成以下操作;
- 已将 PDF 文件上传到 Firebase 存储
- 从目录路径 获取
- 创建一个
PDFView
并传递URL
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
}
}
DataManager
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
}
我不能 post 这作为评论,因为我没有足够的声誉来这样做,但似乎问题可能出在你的 urlForDocPath 函数中,它试图执行异步操作但同步返回。
你能检查 PDFKitView 上的 url 是否不为 nil 吗?因为如果是的话,就证明了我的观点。
尚未在 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)
}
}