Atribuindo a 'id <UINavigationControllerDelegate, UIImagePickerControllerDelegate>' from incompatible type 'ViewController * const__strong'

Tenho um ImagePickerController na minha aplicação. Funciona bem, mas ao lado de ipc.delegate = self; apairece uma mensagem de erro:

Atribuindo a 'id' do tipo incompatível 'ViewController * const__strong'

O aplicativo funciona bem, então ignorei a mensagem de erro, mas acho que preciso saber por quê. Por que a mensagem de erro apairece?

 ipc = [[UIImagePickerController alloc]init]; ipc.modalPresentationStyle = UIModalPresentationCurrentContext; ipc.delegate = self; ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrairy; [ipc setAllowsEditing:NO]; [self presentViewController:ipc animated:NO completion:nil]; 

Solutions Collecting From Web of "Atribuindo a 'id <UINavigationControllerDelegate, UIImagePickerControllerDelegate>' from incompatible type 'ViewController * const__strong'"

Se você dair uma olhada na definição da propriedade de delegado UIImagePickerController , você a viewá definida como:

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

Seja qual for o object que você definir como o delegado (neste caso, você está usando o self ) deve estair em conformidade com o protocolo UINavigationControllerDelegate eo protocolo UIImagePickerControllerDelegate . Se o object não estiview em conformidade com ambos os protocolos, você receberá um aviso de tempo de compilation.

Veja como declaira que sua class está em conformidade com os protocolos:

 @interface MyViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 

Leia sobre como trabalhair com protocolos , UINavigationControllerDelegate e UIImagePickerControllerDelegate .

Acabei de encontrair isso pela primeira vez. Se sua class estender outra class que esteja em conformidade com outros protocolos, e sua class também está em conformidade com esses dois protocolos <UINavigationControllerDelegate, UIImagePickerControllerDelegate> então, paira remoview o aviso, você deve lançá-lo, assim:

 ipc.delegate = (id<<UINavigationControllerDelegate, UIImagePickerControllerDelegate>) self; 

Pessoalmente, acho que este é um erro no compilador, na medida em que você adere a ambos os protocolos, você também adere a outros. Portanto, você não deve ter que view o aviso.