-
Notifications
You must be signed in to change notification settings - Fork 139
Open
Description
Trying to add a publisher to UIImagePickerController using a DelegateProxy
My code:
extension UIImagePickerController {
var didFinishPickingMedia: AnyPublisher<[UIImagePickerController.InfoKey: Any], Never> {
let didPickSelector =
#selector(UIImagePickerControllerDelegate.imagePickerController(_:didFinishPickingMediaWithInfo:))
return delegateProxy
.interceptSelectorPublisher(didPickSelector)
.map { $0[1] as! [UIImagePickerController.InfoKey: Any] }
.eraseToAnyPublisher()
}
var didCancel: AnyPublisher<Void, Never> {
let didCancelSelector = #selector(UIImagePickerControllerDelegate.imagePickerControllerDidCancel(_:))
return delegateProxy
.interceptSelectorPublisher(didCancelSelector)
.map { _ in () }
.eraseToAnyPublisher()
}
private var delegateProxy: UIImagePickerControllerDelegateProxy {
.createDelegateProxy(for: self)
}
}
private class UIImagePickerControllerDelegateProxy: DelegateProxy,
UIImagePickerControllerDelegate,
UINavigationControllerDelegate,
DelegateProxyType {
func setDelegate(to object: UIImagePickerController) {
object.delegate = self
}
}Works well on devices but crashes when presenting the controller on a simulator with 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'.
Metadata
Metadata
Assignees
Labels
No labels