DocumentPicker делегат не вызывается UIDocumentPickerViewController - PullRequest
0 голосов
/ 03 мая 2019

У меня есть следующий 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")
  }

}

Средство выбора отображается и отклоняется правильно, но делегат никогда не вызывается, и поэтому print никогда не выполняется.

Любые советы приветствуются.

Редактировать 1

Вызов метода importFromFiles происходит внутри AppDelegate. Более конкретно, это происходит при определении закрытия для настройки SwiftTweaks:

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

}

1 Ответ

1 голос
/ 03 мая 2019

Похоже, вам нужно сохранить основной объект, как у вас

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

внутри, где вы представляете этот сборщик, MyViewController() не сохраняется, поэтому сделайте его экземпляром var, например

var main = MyViewController()

main.importFromFiles(origin:self)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...