iPhone - MFMailComposeViewController委托不兼容的类型

Rob*_*Rob 15 iphone objective-c messageui ios mfmailcomposeviewcontroller

我有一个视图控制器,以模态方式打开MFMailComposeViewController.当我尝试将邮件视图控制器的委托设置为父视图控制器时,我收到此警告:

Assigning to 'id<UINavigationControllerDelegate>' from incompatible
type 'MoreViewController *__strong'
Run Code Online (Sandbox Code Playgroud)

父视图控制器在其接口声明中肯定有MFMailComposeViewControllerDelegate,并且正在实现委托方法-mailComposeController: didFinishWithResult:error:,如下所示:

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

我真的不明白为什么父视图控制器被识别为UINavigationControllerDelegate,因为我没有实现这些方法,也没有这样声明它.我不会那么担心它,但委托方法永远不会被调用,所以我猜这个"不匹配"是问题的一部分.

如果它有帮助,这就是我在邮件视图控制器中的方式viewDidLoad:

// MAIL
self.mail = [[MFMailComposeViewController alloc] init];
self.mail.delegate = self;
Run Code Online (Sandbox Code Playgroud)

提前感谢您的任何想法.

mat*_*way 29

你想要mailComposeDelegate而不是delegate:

self.mail.mailComposeDelegate = self;
Run Code Online (Sandbox Code Playgroud)

基本上,你设置的delegate是因为MFMailComposeViewController继承自UINavigationController,意味着delegate需要实现UINavigationControllerDelegate.

  • 没有问题.这是一个错误,我做了很多次,直到今天仍然有点困,我有点困!你不是一个人 :-). (2认同)