iPhone - UIImagePickerControllerDelegate héritage
J'ai ajouté un UIImagePickerController
à un UIViewController
. J'ai également cédé la UIImagePickerControllerDelegate
pour que UIViewController
.
Lorsque j'exécute la ligne suivante,
myPicker.delegate = self;
Xcode cadeaux moi avec le message suivant:
avertissement: l'affectation à
id
de type incompatible 'RootViewController'
Puis j'ai ajouté UINavigationControllerDelegate
protocole à la même UIViewController
et le message d'erreur a disparu.
Donc, dois-je ajouter que les deux protocoles à la UIViewController
quand j'ajoute un UIImagePickerController
?
Si le UIImagePickerController
est une sous-classe de UINavigationController
comme indiqué dans les docs, ne devrait-ce pas être automatique? Pourquoi dois-je ajouter son parent délégué du protocole, et pas seulement les UIImagePickerControllerDelegate
protocole?
Est-ce un bug ou ai-je raté quelque chose?
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez remarqué,
UIImagePickerController
hérite deUINavigationController
. Il utilise le mêmedelegate
propriété si et de ne pas déclarer un (hypothétique) "imagePickerDelegate" de sa propre, de sorte que votre délégué doit se conformer aux deux protocoles. Il est logique, parce que vous êtes aussi en attribuant le même délégué à laUINavigationController
partie (qui ne sait rien sur le sélecteur d'images).La conception d'API est un peu discutable ici, à mon avis, mais de toute façon, toutes les méthodes dans
UINavigationControllerDelegate
sont en option, de sorte qu'il suffit de se déclarer conformes au protocole et être fait avec elle.Ajouter ces code comme ci-dessous,vous pouvez voir l'avertissement disparaît.
Le Protocole de
UIImagePickerController
etUINavigationController
doit être ajouté dans votre interface, ce qui peut rendre l'avertissement invisible.