15

Tengo un controlador de vista que abre un MFMailComposeViewController de forma modal. Cuando intento configurar el delegado del controlador de vista electrónico al controlador de vista de los padres, me sale esta advertencia:iPhone - MFMailComposeViewController delegado incompatible tipo

Assigning to 'id<UINavigationControllerDelegate>' from incompatible 
type 'MoreViewController *__strong' 

El controlador de vista de los padres definitivamente tiene MFMailComposeViewControllerDelegate en su declaración de interfaz y está implementando el método delegado -mailComposeController: didFinishWithResult:error: de la siguiente manera:

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error 
{ 
    NSLog(@"Delegate called"); 
} 

Realmente no entiendo por qué el controlador de vista padre está siendo reconocido como un UINavigationControllerDelegate, ya que no implemento esos métodos ni lo declaro como tal. No estaría tan preocupado por eso, pero el método de delegado nunca se llama, así que supongo que este "desajuste" es parte del problema.

Si ayuda, esta es la forma en que estoy initting el controlador de vista electrónico, en viewDidLoad:

// MAIL 
self.mail = [[MFMailComposeViewController alloc] init]; 
self.mail.delegate = self; 

Gracias de antemano por cualquier pensamiento que pueda tener.

Respuesta

29

desea establecer mailComposeDelegate en lugar de delegate:

self.mail.mailComposeDelegate = self; 

Básicamente, usted comenzaba la delegate que por MFMailComposeViewController hereda de UINavigationController, significa que delegate necesidades para implementar UINavigationControllerDelegate.

+0

¡Bingo, gracias! – Rob

+2

Sin problemas. ¡Ese es un error que cometí muchas veces y todavía lo hago hasta hoy cuando tengo un poco de sueño! No estas solo :-). – mattjgalloway

+0

mattjgalloway, gracias! :) – Oleg

Cuestiones relacionadas