iPhone - делегат MFMailComposeViewController несовместимого типа - PullRequest
15 голосов
/ 18 марта 2012

У меня есть контроллер представления, который модально открывает MFMailComposeViewController. Когда я пытаюсь установить делегат контроллера почтового представления на родительский контроллер представления, я получаю это предупреждение:

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

Родительский контроллер представления определенно имеет MFMailComposeViewControllerDelegate в своем объявлении интерфейса и реализует метод делегата -mailComposeController: didFinishWithResult:error: следующим образом:

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

Я действительно не понимаю, почему родительский контроллер представления распознается как UINavigationControllerDelegate, поскольку я не реализую эти методы и не объявляю его таковым. Я бы не волновался об этом, но метод делегата никогда не вызывается, поэтому я предполагаю, что это «несоответствие» является частью проблемы.

Если это поможет, вот как я подключаю контроллер представления почты, в viewDidLoad:

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

Заранее благодарим за любые мысли, которые у вас могут возникнуть.

1 Ответ

29 голосов
/ 18 марта 2012

Вы хотите установить mailComposeDelegate вместо delegate:

self.mail.mailComposeDelegate = self;

По сути, вы устанавливали delegate, поскольку MFMailComposeViewController наследуется от UINavigationController, что означает delegateнеобходимо реализовать UINavigationControllerDelegate.

...