Ошибка делегата PHPicker: PHPickerViewControllerDelegate не отвечает на сборщик:didFinishPicking
В WWDC20 Apple представила PHPicker, замену UIImagePickerController.
У меня есть оболочка класса NSObject, которая обрабатывает всю конфигурацию и представление контроллера выбора изображений, теперь я заменяю реализацию для поддержки iOS14.
Даже если я поставлю делегата self
Я получаю сообщение об ошибке:
[Picker] PHPickerViewControllerDelegate doesn't respond to picker:didFinishPicking:
Я думаю, что он проверяет родительский контроллер представления, что он действительно не реализует методы делегата, а оболочка делает.
Вот мой пример кода:
import Foundation
import PhotosUI
class myPicker: PHPickerViewControllerDelegate{
func openFrom(parent:UIViewController!) {
var config:PHPickerConfiguration! = PHPickerConfiguration()
config.selectionLimit = 1
config.filter = nil
let pickerViewController:PHPickerViewController! = PHPickerViewController(configuration:config)
pickerViewController.delegate = self //<---
parent.present(pickerViewController, animated:true, completion:nil)
}
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true, completion:nil)
for result:PHPickerResult in results {
let itemProvider:NSItemProvider = result.itemProvider
print(itemProvider)
}
// ...do something with images...
}
}
Используй это...
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let mypicker = myPicker()
mypicker.openFrom(parent: self)
}
Что ты посоветуешь?
1 ответ
Проблема в том, что Cocoa Objective-C не может проанализировать ваш класс. + Изменить
class myPicker: PHPickerViewControllerDelegate
Чтобы
class myPicker: NSObject, PHPickerViewControllerDelegate
Вам нужно сделать "class myPicker" как одноэлементный класс. Потому что вы должны убедиться, что делегат не равен нулю. Кроме того, вы можете изменить этот instance = nil в методе didFinishPicking.