15

我有一个视图控制器,它以模态方式打开MFMailComposeViewController。当我尝试设置邮件视图控制器的委托父视图控制器,我得到这样的警告:iPhone - 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,因为我没有实现这些方法,也没有声明它。我不会那么担心,但委托方法永远不会被调用,所以我猜这个“不匹配”是问题的一部分。

如果有帮助,这是我怎么initting邮件视图控制器,在viewDidLoad

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

预先感谢您的任何想法。

回答

29

你想设置mailComposeDelegate而非delegate

self.mail.mailComposeDelegate = self; 

基本上,你设置delegate这是因为从UINavigationControllerMFMailComposeViewController继承,意味着delegate需要实现UINavigationControllerDelegate

+0

宾果,谢谢你! – Rob 2012-03-17 20:46:38

+2

没有probs。这是我犯了很多次错误,至今仍然有点困倦!你不是一个人 :-)。 – mattjgalloway 2012-03-17 20:47:09

+0

mattjgalloway,谢谢! :) – Oleg 2013-04-09 12:44:26