28

He agregado un UIImagePickerController a un UIViewController. También he asignado el UIImagePickerControllerDelegate a ese UIViewController.iPhone - UIImagePickerControllerDelegate inheritance

Cuando ejecuta la siguiente línea,

myPicker.delegate = self; 

Xcode me regalos con el siguiente mensaje:

advertencia: asignar a Identificación de tipo incompatible 'RootViewController'

Luego agregué el protocolo UINavigationControllerDelegate al mismo UIViewController y desapareció el mensaje de error.

Entonces, ¿tengo que agregar ambos protocolos al UIViewController cuando agrego un UIImagePickerController?

Si el UIImagePickerController es una subclase de UINavigationController como se indica en los documentos, ¿no debería ser automático? ¿Por qué tengo que agregar el protocolo de delegado principal y no solo el protocolo UIImagePickerControllerDelegate?

¿Esto es un error o me falta algo?

Respuesta

61

Como ha indicado, UIImagePickerController hereda de UINavigationController. Sin embargo, utiliza la misma propiedad delegate y no declara un (hipotético) "imagePickerDelegate" propio, por lo que su delegado debe cumplir ambos protocolos. Tiene sentido, porque también está asignando el mismo delegado a la parte UINavigationController (que no sabe nada sobre el selector de imágenes).

El diseño de la API es un poco cuestionable aquí en mi opinión, pero de todos modos, todos los métodos en UINavigationControllerDelegate son opcionales, por lo que es suficiente para declarar que cumple con el protocolo y listo.

+1

es ilógico y rompe el sentido común, y los documentos, como siempre, son vagos como el infierno, pero sospeché que el problema era algo así. ¡Gracias de todos modos! – SpaceDog

33

Agregue este código como se muestra a continuación, puede ver desaparecer la advertencia.

@interface viewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { } 
@end 

El Protocolo de UIImagePickerController y UINavigationController hay que añadir en su interfaz, esto puede hacer que el aviso invisible.

+0

Gracias esto me ayuda .. – Shivaay

+0

Gracias me ayudó mucho y resolvió el problema rápidamente – Rinku