Подтвердить что ты не робот

IPhone - UIImagePickerControllerDelegate наследование

Я добавил UIImagePickerController в UIViewController. Я также присвоил UIImagePickerControllerDelegate этому UIViewController.

Когда я выполняю следующую строку,

myPicker.delegate = self;

Xcode предлагает мне следующее сообщение:

предупреждение: присвоение Я бы из несовместимого типа "RootViewController"

Затем я добавил протокол UINavigationControllerDelegate к тому же UIViewController, и сообщение об ошибке исчезло.

Итак, мне нужно добавить оба протокола в UIViewController, когда я добавляю UIImagePickerController?

Если UIImagePickerController является подклассом UINavigationController, как указано в документах, не должно ли оно быть автоматическим? Почему я должен добавить свой родительский протокол делегатов, а не только протокол UIImagePickerControllerDelegate?

Является ли это ошибкой или я что-то не хватает?

4b9b3361

Ответ 1

Как вы отметили, UIImagePickerController наследует от UINavigationController. Он использует одно и то же свойство delegate, хотя и не объявляет (гипотетический) "imagePickerDelegate" своим собственным, поэтому ваш делегат должен соответствовать обоим протоколам. Это имеет смысл, потому что вы также назначаете один и тот же делегат части UINavigationController (которая ничего не знает об устройстве выбора изображений).

Конструкция API здесь немного сомнительна, но в любом случае все методы в UINavigationControllerDelegate являются необязательными, поэтому достаточно объявить, что вы соответствуете протоколу и выполняетесь с ним.

Ответ 2

Добавьте этот код, как показано ниже, вы можете видеть, что предупреждение исчезает.

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

Протокол UIImagePickerController и UINavigationController должен быть добавлен в ваш интерфейс, это может сделать предупреждение невидимым.