Нет обратного вызова при использовании UIDocumentPickerViewController - PullRequest
0 голосов
/ 20 ноября 2018

Я использую UIDocumentPickerViewController для выбора документа на iPhone.

Я реализовал эту функцию следующим образом.

class Si3EntityDocumentViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UIDocumentInteractionControllerDelegate, UIDocumentPickerDelegate, UINavigationControllerDelegate, UIDocumentMenuDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        setLoader()
        getDocuments(id:entity.id)
        let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
        button.backgroundColor = .red
        button.setTitle("Upload Doc", for: .normal)
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        self.view.addSubview(button)
        // Do any additional setup after loading the view.
    }

    @objc func buttonAction(sender: UIButton!){
        let documentPicker = UIDocumentPickerViewController(documentTypes: [String(kUTTypeText),String(kUTTypeContent),String(kUTTypeItem),String(kUTTypeData)], in: .import)
        documentPicker.delegate = self
        present(documentPicker, animated: true, completion: {
            documentPicker.delegate = self
        } )
    }

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

}

Метод func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt url: URL) устарел вiOS 11, поэтому я заменил его на func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL])

. Почему-то я не получаю обратный вызов в func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL])

У меня также есть какой-то другой код в этом классе, но я 'мы не включили это.Когда я выбираю документ или нажимаю кнопку «Отмена», в консоли появляется следующая ошибка

[DocumentManager] Служба просмотра завершила работу с ошибкой: Ошибка Domain = _UIViewServiceErrorDomain Code = 1 "(null)" UserInfo ={Прекращено = метод отключения}

Я знаю, что упускаю что-то очень глупое, любая помощь приветствуется.

Спасибо в ожидании.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Я использовал эти методы в быстрой 3

func openImportDocumentPicker() {
    let documentPicker = UIDocumentPickerViewController(documentTypes: ["public.item"], in: .import)
    documentPicker.delegate = self
    documentPicker.modalPresentationStyle = .formSheet
    self.present(documentPicker, animated: true, completion: { _ in })
}

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
    if controller.documentPickerMode == .import {
        let alertMessage: String = "Successfully imported \(url.absoluteURL)"
   }
}

func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
    print("Cancelled")
}
0 голосов
/ 20 ноября 2018

Вы можете взглянуть на документацию Apple для лучшего понимания.

Поведение UIDocumentPickerViewController по умолчанию - выбрать один документ, и вам придется использовать:

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
}

Если вы используете UIDocumentPickerViewController для выбора нескольких документов, вам нужно установить для свойства allowsMultipleSelection значение true и реализовать

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

Также, следующей строки будет достаточно.

present(documentPicker, animated: true)
...