swift - UIDocumentPickerViewController - 不选择文档
问题描述
我有以下文档选择器,改编自此处,在 iOS 设备/模拟器上运行。
struct FilePickerController: UIViewControllerRepresentable {
var callback: (URL) -> ()
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: UIViewControllerRepresentableContext<FilePickerController>) {
// Update the controller
}
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
debugPrint("Making the picker")
let controller = UIDocumentPickerViewController(documentTypes: [String(kUTTypeText)], in: .open)
controller.delegate = context.coordinator
debugPrint("Setup the delegate \(context.coordinator)")
return controller
}
class Coordinator: NSObject, UIDocumentPickerDelegate {
var parent: FilePickerController
init(_ pickerController: FilePickerController) {
self.parent = pickerController
debugPrint("Setup a parent")
debugPrint("Callback: \(String(describing: parent.callback))")
}
func documentPicker(didPickDocumentsAt: [URL]) {
debugPrint("Selected a document: \(didPickDocumentsAt[0])")
parent.callback(didPickDocumentsAt[0])
}
func documentPickerWasCancelled() {
debugPrint("Document picker was thrown away :(")
}
deinit {
debugPrint("Coordinator going away")
}
}
}
struct FilePickerView: View {
var body: some View {
FilePickerController(callback: filePicked)
}
func filePicked(_ url: URL) {
debugPrint("Filename: \(url)")
}
}
运行时,文档选择器正确打开,我可以选择一个文本文件。但是,我在控制台中得到以下输出:
"Setup a parent"
"Callback: (Function)"
"Making the picker"
"Setup the delegate <_TtCV7EasyFPU20FilePickerController11Coordinator: 0x600003d41b60>"
2020-08-07 12:05:02.116936+0200 EasyFPU[53507:2766688] [Common] _BSMachError: port 6437; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
2020-08-07 12:05:04.315792+0200 EasyFPU[53507:2790673] [DocumentManager] Failed to associate thumbnails for picked URL file:///Users/Ulrich/Library/Developer/CoreSimulator/Devices/BC04A404-7456-4CD8-888B-49346927986C/data/Containers/Data/Application/64FDB970-1A0E-4E03-9FF7-AB089EDDCA98/Documents/8619BCA8-1186-4265-AE8E-AD82FA11E460.json with the Inbox copy file:///Users/Ulrich/Library/Developer/CoreSimulator/Devices/BC04A404-7456-4CD8-888B-49346927986C/data/Containers/Data/Application/64FDB970-1A0E-4E03-9FF7-AB089EDDCA98/tmp/info.rueth.EasyFPU-Inbox/8619BCA8-1186-4265-AE8E-AD82FA11E460.json: Error Domain=QLThumbnailErrorDomain Code=102 "(null)" UserInfo={NSUnderlyingError=0x60000337f7e0 {Error Domain=GSLibraryErrorDomain Code=3 "Generation not found" UserInfo={NSDescription=Generation not found}}}
2020-08-07 12:05:06.232918+0200 EasyFPU[53507:2766688] [Common] _BSMachError: port 14e03; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
"Coordinator going away"
该函数documentPicker
永远不会被调用。任何想法为什么?
解决方案
永远不会调用函数 documentPicker。任何想法为什么?
因为您声明了错误的委托方法。你有
func documentPicker(didPickDocumentsAt: [URL]) {
它应该是
func documentPicker(_ controller: UIDocumentPickerViewController,
didPickDocumentsAt urls: [URL]) {
推荐阅读
- flutter - 如果用户按下后退按钮,则阻止 Navigator.push
- java - 在 Tomcat 8.0 上初始化 struts 应用程序时出错
- python - 使用 statsmodels.api 使用 ols().fit() 时出错
- xamarin.android - 使用 MvvmCross 创建 OnBoarding 流程
- wso2esb - WSO2 ESB HL7 处理
- php - 不能在帖子控制器中“排除”类别
- linux - 检查 git 存储库中文件的文件版本而不下载它们
- html - 如何在表格边框之间包含间隙?
- c++ - 没有运算符 >> 对应于这些操作数
- tfs - VS Code:登录到 TFS 不是使用密码,而是使用智能卡