IPhone - UIImagePickerControllerDelegate наследование
Я добавил UIImagePickerController
в UIViewController
. Я также присвоил UIImagePickerControllerDelegate
этому UIViewController
.
Когда я выполняю следующую строку,
myPicker.delegate = self;
Xcode предлагает мне следующее сообщение:
предупреждение: присвоение Я бы из несовместимого типа "RootViewController"
Затем я добавил протокол UINavigationControllerDelegate
к тому же UIViewController
, и сообщение об ошибке исчезло.
Итак, мне нужно добавить оба протокола в UIViewController
, когда я добавляю UIImagePickerController
?
Если UIImagePickerController
является подклассом UINavigationController
, как указано в документах, не должно ли оно быть автоматическим? Почему я должен добавить свой родительский протокол делегатов, а не только протокол UIImagePickerControllerDelegate
?
Является ли это ошибкой или я что-то не хватает?
Ответы
Ответ 1
Как вы отметили, UIImagePickerController
наследует от UINavigationController
. Он использует одно и то же свойство delegate
, хотя и не объявляет (гипотетический) "imagePickerDelegate" своим собственным, поэтому ваш делегат должен соответствовать обоим протоколам. Это имеет смысл, потому что вы также назначаете один и тот же делегат части UINavigationController
(которая ничего не знает об устройстве выбора изображений).
Конструкция API здесь немного сомнительна, но в любом случае все методы в UINavigationControllerDelegate
являются необязательными, поэтому достаточно объявить, что вы соответствуете протоколу и выполняетесь с ним.
Ответ 2
Добавьте этот код, как показано ниже, вы можете видеть, что предупреждение исчезает.
@interface viewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { }
@end
Протокол UIImagePickerController
и UINavigationController
должен быть добавлен в ваш интерфейс, это может сделать предупреждение невидимым.