#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. Рад, что вы его решили. Тогда перейдем к следующей проблеме 🙂