IPhone - MFMailComposeViewController делегировать несовместимый тип

У меня есть контроллер вида, который открывает 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

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

self.mail.mailComposeDelegate = self;

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