Estoy tratando de que la aplicación vaya a un controlador de vista diferente después de que el usuario elija una foto del selector.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerEditedImage] as? UIImage {

        let previewController = self.storyboard?.instantiateViewController(withIdentifier: "previewVC") as! PreviewViewController
        previewController.previewImage.image = image
        previewController.navigationItem.setHidesBackButton(true, animated: false)
        self.navigationController?.pushViewController(previewController, animated: true)
    }
}

previewController simplemente tiene una vista de imagen (@IBOutlet weak var previewImage: UIImageView!) y un botón para publicar la foto, así que estoy tratando de configurar esa vista de imagen para mostrar la imagen seleccionada.

Sin embargo, aparece un error "inesperadamente encontrado nulo al desenvolver un valor opcional" en la línea previewController.previewImage.image = image. previewImage en el previewController es nulo en el depurador, pero no estoy seguro de por qué, ¿no se establece eso tan pronto como el usuario presiona "elegir" en el selector?

¿Hay otro paso involucrado aquí?

0
KingTim 19 mar. 2017 a las 18:19

2 respuestas

La mejor respuesta

La causa principal de su problema es que está intentando acceder a las salidas del controlador de vista demasiado pronto. Las vistas y salidas del controlador de vista no se crean y asignan inmediatamente después de crear una instancia del controlador de vista.

También es un mal diseño intentar acceder directamente a las vistas de un controlador de vista desde el código fuera de ese controlador de vista. La solución adecuada, en este caso, es agregar una propiedad UIImage que pueda establecer. Luego, deje que el controlador de vista actualice su propia vista de imagen en función del valor de esa propiedad de imagen en el momento adecuado (como en viewDidLoad).

2
rmaddy 19 mar. 2017 a las 15:27

Agregue esto a su función

dismiss(animated:true, completion: nil)

Al finalizar, puede definir un cierre que haga lo que quiera.

0
Taher 19 mar. 2017 a las 15:51