UIDocumentPickerViewController не вызывает метод didPickDocument

#ios #swift #uidocumentpickervc

#iOS #swift #uidocumentpickervc

Вопрос:

У меня есть средство выбора документа, но после выбора документа часть didPickDocumentAt никогда не запускается. Он работал до того, как я обновил swift, есть ли что-то, что изменилось сейчас?

 func selectDocument(_ sender: UIButton!){
    let documentPickerVC = UIDocumentPickerViewController(documentTypes: ["org.openxmlformats.wordprocessingml.document", "com.microsoft.word.doc"], in: UIDocumentPickerMode.import)
    documentPickerVC.delegate = self
    self.present(documentPickerVC, animated: true, completion: nil)
}

func documentPicker(_ documentPicker: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
    print("file picked: (url)")
    documentPicker.dismiss(animated: true, completion: nil)
}
  

Также ничего не происходит с ошибкой, он просто не вызывает этот documentPicker метод.

У меня есть аналогичный для выбора носителя, и он отлично работает…

 func selectMedia(_ sender: UIButton!){
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){
        picker.delegate = self
        picker.allowsEditing = false
        picker.mediaTypes = [kUTTypeMovie as String]
        self.present(picker, animated: true, completion: nil)
    }
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info:[String: Any]) {
    let url = info[UIImagePickerControllerMediaURL] as! URL
    print("media picked: (url)")
}
  

Редактировать:
Я только что добавил documentPickerWasCancelled метод, и по какой-то причине он вызывается при выборе документа.
Обратите внимание, что я выбираю документ с Google Диска, повлияет ли это на что-либо?

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

Комментарии:

1. вы используете swift 2 или swift 3?

2. Теперь это Swift 3

3. @John Ранее это работало? В swift 2

4. Быстрое предположение от меня. ViewController Реализует UIDocumentPickerDelegate ли ваш протокол? Я вижу, что у вас есть didPickDocumentAt метод, но вы добавили UIDocumentPickerDelegate либо в объявление вашего класса, либо в расширение?

5. тогда еще одно предположение 🙂 В документации метод делегирования называется следующим образом: func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) в то время как у вас есть documentPicker(_ documentPicker: UIDocumentPickerViewController, didPickDocumentAt url: URL) (параметр называется там, controller где вы его вызвали documentPicker ), не знаю, имеет ли это какое-либо значение.

Ответ №1:

Приведенный выше код выглядит как правильный. Я удалил приложение Google Drive (откуда я получал файлы) и переустановил его, а затем оно заработало, как ожидалось. Я также пробовал из dropbox, и это тоже сработало.

Не уверен, что раньше приводило к сбою.

Комментарии:

1. Рад, что вы его решили. Тогда перейдем к следующей проблеме 🙂