15

Ho un controller di visualizzazione che apre un MFMailComposeViewController modally. Quando provo a impostare il delegato del controller della vista mail al controller della vista genitore, ottengo questo avvertimento:iPhone - MFMailComposeViewController delegato tipo incompatibile

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

Il controller di vista padre ha sicuramente MFMailComposeViewControllerDelegate nella sua dichiarazione di interfaccia e sta attuando il metodo delegato -mailComposeController: didFinishWithResult:error: come segue:

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

Davvero non capisco perché il controller di visualizzazione genitore venga riconosciuto come UINavigationControllerDelegate, poiché non implemento tali metodi né lo dichiaro come tale. Non sarei così preoccupato, ma il metodo delegato non viene mai chiamato, quindi suppongo che questo "mismatch" faccia parte del problema.

Se aiuta, questo è come sto initting la vista di controllo posta elettronica, in viewDidLoad:

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

Grazie in anticipo per tutti i pensieri che possono avere.

risposta

29

si desidera impostare mailComposeDelegate piuttosto che delegate:

self.mail.mailComposeDelegate = self; 

In sostanza, si stavano mettendo la delegate che a causa MFMailComposeViewController eredita da UINavigationController, significa che delegate deve attuare UINavigationControllerDelegate.

+0

Bingo, grazie !! – Rob

+2

Nessun problema. Questo è un errore che ho fatto molte molte volte e lo faccio ancora oggi quando sono un po 'assonnato! Non sei solo :-). – mattjgalloway

+0

mattjgalloway, grazie! :) – Oleg