Установка делегата UIImagePickerController выдает предупреждение о UINavigationControllerDelegate
Код:
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self.navigationController presentModalViewController:picker animated:YES];
[picker release];
Предупреждение, которое отображается в строке picker.delegate = self;
:
Class 'CardEditor' does not implement the 'UINavigationControllerDelegate' protocol
Почему UIImagePickerController ухаживает за тем, реализует ли мой класс протокол UINavigationControllerDelegate?
Ответы
Ответ 1
UIImagePickerController
наследуется от UINavigationController
. Свойство delegate является частью UINavigationController
, поэтому требуется, чтобы его делегат соответствовал протоколу UINavigationControllerDelegate
.
Свойство делегирования объявлено следующим образом:
@property(nonatomic, assign) id<UINavigationControllerDelegate> delegate;
Это говорит компилятору проверить, будет ли ваш контроллер реализовывать протокол UINavigationConrollerDelegate
. Проверка выполняется так, что предупреждение о компиляции может быть сгенерировано, если ваш класс контроллера неправильно реализует все методы, которые UINavigationController
может отправить его делегату.
Если вы ищете решение, вы можете указать (в интерфейсе класса контроллера), что ваш контроллер соответствует этому протоколу:
@interface MyController : NSObject <UINavigationControllerDelegate>
...
@end
Как только это будет сделано, компилятор предупредит вас о любых необходимых методах делегата, которые вы не реализовали. Это хорошо, так как это помешает вам освободить код, который может случайно вызвать ошибку "не найденная".
Ответ 2
Вы можете сделать это в файле .h
@interface MyController : UIViewController<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
Ответ 3
e. Джеймс прав. Кроме того, UINavigationControllerDelegate
указывает только необязательные методы. Таким образом, быстрое решение - просто позволить вашему контроллеру представления реализовать протокол без реализации каких-либо его методов.
Я проверил все примеры кода Apple для реализации UIImagePickerControllerDelegate
, и все они не реализуют ни один из методов UINavigationControllerDelegate
. Поэтому, если они вам не нужны, не беспокойтесь.
Ответ 4
Я также столкнулся с такой же проблемой, после того как поиск нашел решение, чтобы добавить UINavigationControllerDelegate вместе с вашим UIImagePickerControllerDelegate в файле .h.
@interface LatestJobsVC : UIViewController <UIImagePickerControllerDelegate , UINavigationControllerDelegate>
Надеюсь, что это поможет тебе.
Благодаря