【发布时间】:2020-11-01 13:50:20
【问题描述】:
我尝试为我的 iOS 应用创建一个文档选择器。
这是我的代码(我将 UIDocumentPickerViewController 包装在我的 SwiftUI 视图中,使用 UIViewControllerRepresentable):
import SwiftUI
import MobileCoreServices
struct DocumentPickerViewController: UIViewControllerRepresentable {
var callback: (Data) -> ()
func makeCoordinator() -> Coordinator {
return Coordinator(documentController: self)
}
func updateUIViewController(
_ uiViewController: UIDocumentPickerViewController,
context: UIViewControllerRepresentableContext<DocumentPickerViewController>) {
}
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let controller = UIDocumentPickerViewController(documentTypes: [String(kUTTypePDF)], in: .open)
controller.delegate = context.coordinator
return controller
}
class Coordinator: NSObject, UIDocumentPickerDelegate {
var documentController: DocumentPickerViewController
init(documentController: DocumentPickerViewController) {
self.documentController = documentController
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let url = urls.first else { return }
let fileManager = FileManager.default
print(fileManager.fileExists(atPath: url.path))
let data = NSData(contentsOfFile: url.path)
let file = UploadFileData(fileName: "\(url)", fileType: .file, fileData: data!)
let dataFile = file.fileData as Data
documentController.callback(dataFile)
}
}
}
enum UploadFileType{
case photo
case file
}
struct UploadFileData {
var fileName: String
var fileType: UploadFileType
var fileData: NSData
}
var file: UploadFileData?
它可以在我的模拟器上运行,但是当我在真实设备上选择 PDF 时,我收到以下错误: 致命错误:在展开可选值时意外发现 nil:文件 MyApp/DocumentPickerViewController.swift,第 44 行
即换行:let dataFile = file.fileData as Data
【问题讨论】: