UIImagePickerControllerDelegate Methods Not Called When Using An NSObject Class?

Viewed 489

I currently have an NSObject class of which I've created a UIImagePickerController object. In this class I have 2 functions that sets the sourceType to be the camera in one function and the sourceType to be the photo library in the other functions.

I present the UIImagePickerController object using a protocol in a UIViewController class.

class ImagePickerManager: NSObject
{
    let picker = UIImagePickerController()
    var imagePickerDelegate: ImagePickerProtocol!

    override init()
    {
        super.init()

        picker.delegate = self
    }

    func cameraPicker()
    {
        picker.sourceType = .camera
        picker.cameraCaptureMode = .photo

        imagePickerDelegate.presentImagePicker(picker: picker)
    }

    func photoLibraryPicker()
    {
        picker.sourceType = .photoLibrary

        imagePickerDelegate.presentImagePicker(picker: picker)
    }
}



extension OtherViewController: ImagePickerProtocol
{
    func presentImagePicker(picker: UIImagePickerController)
    {
        self.present(picker, animated: true, completion: nil)
    }
}

class OtherViewController: UIViewController
{
    ...

    @IBAction func addPhoto(_ sender: UIButton)
    {
        let alert = CustomAlertController(title: nil, message: "Aimage", style: .actionSheet)

        alert.addAction(AlertAction(title: "Camera", style: .ok) { action in
            let imagePickerManager = ImagePickerManager()
            imagePickerManager.imagePickerDelegate = self
            imagePickerManager.cameraPicker()
        })

        alert.addAction(AlertAction(title: "Photo Library", style: .ok) { action in
            let imagePickerManager = ImagePickerManager()
            imagePickerManager.imagePickerDelegate = self
            imagePickerManager.photoLibraryPicker()
        })

        alert.addAction(AlertAction(title: "Cancel", style: .cancel))

        present(alert, animated: true, completion: nil)
    }
}

My ImagePickerManager class conforms to the UIImagePickerControllerDelegate and UINavigationControllerDelegate:

extension ImagePickerManager: UIImagePickerControllerDelegate
{
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
    {
        print("imagePickerController")
        if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
        {
            print("SELECTED IMAGE")

        }

        picker.dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController)
    {
        picker.dismiss(animated: true, completion: nil)
    }
}

extension ImagePickerManager: UINavigationControllerDelegate
{

}

However, the NSObject class never calls any of the delegate methods.

I've looked at similar problems:

  1. Why doesn't UIImagePickerController delegate to my Object class?

  2. UIImagePickerControllerDelegate Methods Not Called When Delegate Not UIViewController

  3. swift : UIPickerViewController delegates not called after Class-Extraction

However I couldn't resolve my issue from the above questions.

Can someone point me to what I'm doing wrong?

Thanks!

0 Answers
Related