ios - UIDocumentPickerViewController 未调用 documentPicker 委托(delegate)

标签 ios swift delegates uidocumentpickerviewcontroller

我有以下 ViewController 实现了使用 UIDocumentPickerViewController 将文件导入应用程序的功能:

class MyViewController: UIViewController {
 
  override func viewDidLoad() {
    super.viewDidLoad()
  }
  
  func importFromFiles(origin: UIViewController?) {
         
    let documentPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeContent as String], in: .import)
    documentPicker.delegate = self
    documentPicker.allowsMultipleSelection = true
      
    origin?.present(documentPicker, animated: true, completion: nil)
    
  }
  
}

如您所见,importFromFiles 方法接收一个 ViewController,它只是事件的 VC。此方法从 AppDelegate 调用。

目前,documentPicker 方法如下所示:

extension MyViewController: UIDocumentPickerDelegate {

  func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
    print("Files picked")
  }

}

选择器正确显示和关闭,但委托(delegate)从未被调用,因此 print 从未执行。

编辑1

importFromFiles 方法的调用发生在 AppDelegate 内部。更具体地说,它发生在为 SwiftTweaks 调整定义闭包时:

MyTweaks.importFromFiles.addClosure {
  let topViewController = visibleViewController(root: self.window?.rootViewController)
  let myVC: MyViewController = MyViewController()
  myVC.importFromFiles(origin: topViewController)
}

最佳答案

看来您需要保留主要对象

let myVC: MyViewController = MyViewController()
myVC.importFromFiles(origin: topViewController)

在你在这里显示选择器的地方 MyViewController() 没有被保留,所以让它成为一个实例变量,比如

var main = MyViewController()

main.importFromFiles(origin:self)

关于ios - UIDocumentPickerViewController 未调用 documentPicker 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55961936/

相关文章:

ios - 表格 View 行中的 UISwitch

swift - 为什么在 Swift 中通过 Selector 调用时不考虑函数的默认参数?

c# - 如何知道一个 Action 是否是一个匿名方法?

c# - 接受委托(delegate)函数的扩展方法

类似于 C++ 中的 C# 方法指针

ios - 核心数据重复实体

ios - 如何在 Swift 泛型类中使用 AnyClass

ios - WKWebView 打不开 https ://itunes. apple.com/app/id123456 链接

iphone - 在我的邮件中附加 PDF/Doc 文件

objective-c - 通过 AVCaptureSession 视频输出了解 Metal 用法