iPhone - UIImagePickerControllerDelegate наследование - PullRequest
28 голосов
/ 18 января 2011

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

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

myPicker.delegate = self;

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

предупреждение: присвоение идентификатору из несовместимого типа 'RootViewController'

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

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

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

Это ошибка или я что-то упустил?

Ответы [ 2 ]

61 голосов
/ 18 января 2011

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

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

33 голосов
/ 11 июня 2012

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

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

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

...