Назначение предупреждения о несовместимом типе - PullRequest
3 голосов
/ 20 января 2012

Присвоение идентификатору из несовместимого типа '' CameraVIewController * '' предупреждения с указанным ниже кодом

 UIImagePickerController * picker = [[UIImagePickerController alloc] init];
 picker.delegate = self;

Ответы [ 4 ]

17 голосов
/ 05 сентября 2013

На самом деле, я думаю, что настоящая причина в том, что вы пропускаете протокол

в UIImagePickerController.h вы можете увидеть определение делегата:

@property(nonatomic,assign)    id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;

Итак, если вы хотите назначить делегата следующим образом:

picker.delegate = self;

Самоконтроль представления должен реализовывать как UINavigationControllerDelegate , так и UIImagePickerControllerDelegate

Если вы реализуете только UIImagePickerControllerDelegate , вы не сможете найти какой-либо литерал ошибки, но вы получите предупреждение " Назначение идентификатору из несовместимого типа" 'CameraVIewController ' '* ", добавьте UINavigationControllerDelegate к объявлению протокола вашего viewController, избавьтесь от него.

Это очень поздний ответ, но я только что встретил и решил его, надеюсь, это поможет.

10 голосов
/ 20 января 2012

вы, вероятно, не объявили, что ваш класс соответствует UIImagePickerController.

@interface CameraVIewController : UIViewController <UIImagePickerControllerDelegate>
7 голосов
/ 20 января 2012

В качестве альтернативы вы можете исправить предупреждение с помощью приведения:

picker.delegate = (id <UIImagePickerControllerDelegate>) self;

Но вы все равно должны реализовать UIImagePickerControllerDelegate.

0 голосов
/ 07 января 2013

Другой способ - объявить частную категорию или расширение класса поверх вашего файла реализации.Например:

@interface CameraVIewController (Private) <UIImagePickerControllerDelegate>
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...