UIDocumentPickerViewController - метод делегата не вызывается

Я использую UIDocumentPickerViewController, чтобы выбрать документы из файлов и загрузить его на сервер. Я могу успешно получить доступ к файлам, но после нажатия на файл метод делегата не вызывается.

Я использовал следующий код для вызова средства выбора документов:

class Uploads: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func uploadDocument(_ sender: Any) {

        let documentPicker = UIDocumentPickerViewController(documentTypes: [String(kUTTypePDF), String(kUTTypePlainText)], in: .import)
        documentPicker.delegate = self
        if #available(iOS 11.0, *) {
            documentPicker.allowsMultipleSelection = false
        } else {
        }
        present(documentPicker, animated: true, completion: nil)
    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

extension Uploads: UIDocumentPickerDelegate {

    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {

        print(urls.first)
    }

    func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
        print("Cancelled")
    }
}

Я заметил, что при вызове метода делегата я получаю следующее предупреждение:

Метод экземпляра 'documentPicker (: didPickDocumentsAt:)' почти соответствует необязательному требованию 'documentPicker (: didPickDocumentsAt:)' протокола 'UIDocumentPickerDelegate'

Сделайте 'documentPicker(_:didPickDocumentsAt:)' закрытым, чтобы отключить это предупреждение

Я считаю, что метод делегата не вызывается из-за этого предупреждения, хотя я не мог понять, почему я получаю это предупреждение.

0 ответов

Надеюсь, что поделитесь образцом кода:

class ViewController : UIViewController,UIDocumentPickerDelegate{

  var documentBrowser: UIDocumentPickerViewController = {
  let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
  let browser = UIDocumentPickerViewController(documentTypes: [documentsPath], in: .open)
      browser.allowsMultipleSelection = true
      return browser
    }()

override func viewDidLoad() {
        super.viewDidLoad()
        self.addChild(documentBrowser)
        documentBrowser.view.frame = self.view.bounds
        view.addSubview(documentBrowser.view)
 }

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

Проблема появляется, если класс, который принимает протокол "UIDocumentPickerDelegate", объявлен как "открытый".

Например, у этого класса будет проблема:

open class FilePickerHelper: UIDocumentPickerDelegate

пока у этого класса не будет проблем:

class FilePickerHelper: UIDocumentPickerDelegate
Другие вопросы по тегам