iPhone – UIImagePickerControllerDelegate herencia

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

Cuando ejecuto la siguiente línea,

 myPicker.delegate = self; 

Xcode me regala el siguiente mensaje:

advertencia: asignar a id del tipo incompatible ‘RootViewController’

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

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 delegado de sus padres y no solo el protocolo UIImagePickerControllerDelegate ?

¿Es esto un error o me estoy perdiendo algo?

Como ha notado, UIImagePickerController hereda de UINavigationController . Sin embargo, utiliza la misma propiedad de delegate y no declara un (hipotético) “imagePickerDelegate” propio, por lo que su delegado debe cumplir con 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 basta con declarar que usted cumple con el protocolo y terminar con él.

Agregue estos códigos como a continuación, puede ver que la advertencia desaparezca.

 @interface viewController : UIViewController  { } @end 

El protocolo de UIImagePickerController y UINavigationController debe agregarse en su interfaz, esto puede hacer que la advertencia sea invisible.