下面的ViewController实现了使用UIDocumentPickerViewController将文件导入应用程序的功能
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
func importFromFiles(origin: UIViewController?) {
let documentPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeContent as String], in: .import)
documentPicker.delegate = self
documentPicker.allowsMultipleSelection = true
origin?.present(documentPicker, animated: true, completion: nil)
}
}如您所见,importFromFiles方法接收一个ViewController,它就是活动VC。此方法是从AppDelegate调用的。
目前,documentPicker方法如下所示:
extension MyViewController: UIDocumentPickerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
print("Files picked")
}
}选择器将正确显示和取消,但从来不调用委托,因此print也不会执行。
编辑1
对importFromFiles方法的调用发生在AppDelegate中。更具体地说,它是在为SwiftTweaks调整定义闭包时发生的:
MyTweaks.importFromFiles.addClosure {
let topViewController = visibleViewController(root: self.window?.rootViewController)
let myVC: MyViewController = MyViewController()
myVC.importFromFiles(origin: topViewController)
}发布于 2019-05-03 01:01:36
看起来,您需要像保留主对象一样保留主对象。
let myVC: MyViewController = MyViewController()
myVC.importFromFiles(origin: topViewController)在您呈现这个选择器的内部,MyViewController()不被保留,所以让它成为一个实例变量,如
var main = MyViewController()main.importFromFiles(origin:self)https://stackoverflow.com/questions/55961936
复制相似问题