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
.