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

Установка делегата 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?

4b9b3361

Ответ 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>

Надеюсь, что это поможет тебе. Благодаря