15

Mam kontroler widoku, który otwiera modalnie MFMailComposeViewController. Kiedy próbuję ustawić delegata kontrolera widoku poczty do kontrolera widoku rodzica, mam to ostrzeżenie:iPhone - MFMailComposeViewController delegate niekompatybilny typ

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

Kontroler widok rodzic na pewno ma MFMailComposeViewControllerDelegate w deklaracji interfejsu i wdraża metodę delegata -mailComposeController: didFinishWithResult:error: następująco:

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

Naprawdę nie rozumiem, dlaczego nadrzędny kontroler widoku jest rozpoznawany jako UINavigationControllerDelegate, ponieważ nie implementuję tych metod ani nie deklaruję go jako takiego. Nie martwiłbym się o to, ale metoda delegatów nigdy nie zostanie wywołana, więc domyślam się, że to "niedopasowanie" jest częścią problemu.

Jeśli to pomoże, to jak mam initting poczty widok kontrolera, w viewDidLoad:

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

Dzięki z góry za wszelkie myśli mogą wystąpić.

Odpowiedz

29

Chcesz ustawić mailComposeDelegate zamiast delegate:

self.mail.mailComposeDelegate = self; 

Zasadniczo, można było ustawienie delegate powodu których MFMailComposeViewController dziedziczy z UINavigationController oznacza, że ​​delegate musi wdrożyć UINavigationControllerDelegate.

+0

Bingo, dziękuję !! – Rob

+2

Brak problemów. To błąd, który popełniłem wiele razy i nadal robię do dnia, kiedy jestem trochę śpiący! Nie jesteś sam :-). – mattjgalloway

+0

mattjgalloway, dziękuję! :) – Oleg

Powiązane problemy