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;

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


person Rob    schedule 17.03.2012    source источник


Ответы (1)


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

self.mail.mailComposeDelegate = self;

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

person mattjgalloway    schedule 17.03.2012
comment
Нет проблем. Это ошибка, которую я совершал много раз и до сих пор делаю, когда немного хочу спать! Ты не одинок :-). - person mattjgalloway; 18.03.2012