iPhone - UIImagePickerControllerDelegate inheritance
Solution 1
As you noted, UIImagePickerController
inherits from UINavigationController
. It uses the same delegate
property though and doesn't declare a (hypothetical) "imagePickerDelegate" of its own, so your delegate has to conform to both protocols. It makes sense, because you're also assigning the same delegate to the UINavigationController
part (that knows nothing about the image picker).
The API design is a bit questionable here in my opinion, but anyway, all methods in UINavigationControllerDelegate
are optional, so it suffices to declare that you conform to the protocol and be done with it.
Solution 2
Add these code like below,you can see the warning disappear.
@interface viewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { }
@end
The Protocol of UIImagePickerController
and UINavigationController
must be added in your interface, this can make the warning invisible.
Duck
Updated on July 17, 2022Comments
-
Duck almost 2 years
I have added a
UIImagePickerController
to aUIViewController
. I have also assigned theUIImagePickerControllerDelegate
to thatUIViewController
.When I execute the following line,
myPicker.delegate = self;
Xcode gifts me with the following message:
warning: assigning to id from incompatible type 'RootViewController'
Then I added the
UINavigationControllerDelegate
protocol to the sameUIViewController
and the error message vanished.So, do I have to add both protocols to the
UIViewController
when I add aUIImagePickerController
?If the
UIImagePickerController
is a subclass ofUINavigationController
as stated in the docs, shouldn't this be automatic? Why do I have to add its parent's delegate protocol and not just theUIImagePickerControllerDelegate
protocol?Is this a bug or am I missing something?