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