【问题标题】:MFMailComposeViewController delegate not called未调用 MFMailComposeViewController 委托
【发布时间】:2015-08-14 07:46:28
【问题描述】:

即使我正在编写以下代码,我也无法调用 Mail composer 委托方法:

-(void)openMailComposerInViewController:(UIViewController *)hostController{
if ([MFMailComposeViewController canSendMail])
{
    // Email Subject
    NSString *emailTitle = @"Test Email";
    // Email Content
    NSString *messageBody = @"Test Email";
    // To address
    NSArray *toRecipents = [NSArray arrayWithObject:@"support@test.com"];

    mailComposer = [[MFMailComposeViewController alloc] init];
    mailComposer.mailComposeDelegate = self;
    [mailComposer setSubject:emailTitle];
    [mailComposer setMessageBody:messageBody isHTML:NO];
    [mailComposer setToRecipients:toRecipents];

    // Present mail view controller on screen

    [hostController presentViewController:mailComposer animated:YES completion:NULL];
    mailController = hostController;
}
else
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure"
                                                    message:@"Your device doesn't support the composer sheet"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
}
}

pragma mark - 邮件

- (void) mailComposeController:(MFMailComposeViewController *)controller    didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
  switch (result)
  {
    case MFMailComposeResultCancelled:
        NSLog(@"Mail cancelled");
        break;
    case MFMailComposeResultSaved:
        NSLog(@"Mail saved");
        break;
    case MFMailComposeResultSent:
        NSLog(@"Mail sent");
        break;
    case MFMailComposeResultFailed:
        NSLog(@"Mail sent failure: %@", [error localizedDescription]);
        break;
    default:
        break;
}

// Close the Mail Interface
[mailController dismissViewControllerAnimated:YES completion:NULL];
}

我不想给自己打电话

但是,我的代表没有被调用。请帮忙。单击“取消”或“发送邮件”按钮时应用程序崩溃

【问题讨论】:

  • 你能提供你的崩溃日志吗?
  • 为什么在提交邮件控制器后设置mailController = hostController

标签: ios iphone mfmailcomposeviewcontroller


【解决方案1】:

我遇到了这个问题,我的问题是我有以下代码:

self.mailComposer.mailComposeDelegate = self
self.mailComposer = MFMailComposeViewController()

我在初始化 mailComposer 对象之前设置了委托。我只是将这两行切换到此,它起作用了:

 self.mailComposer = MFMailComposeViewController()
 self.mailComposer.mailComposeDelegate = self

【讨论】:

    【解决方案2】:

    由于 ARC,我丢失了编写委托的视图控制器,因此它没有被调用。下面的代码帮助我解决了这个问题:

    +(MailComposer *)sharedInstance
    {
    
      static dispatch_once_t onceToken;
      dispatch_once(&onceToken, ^{
        sharedMailComposer = [[MailComposer alloc]init];
      });
      return sharedMailComposer;
    
    }
    

    然后我在调用 MailComposerViewController 时使用了上面的实例

        [[MailComposer sharedInstance] openMailComposerInViewController:[(UINavigationController *)moduleRouter.container topViewController]];
    

    成功了:)

    【讨论】:

      【解决方案3】:

      setMailComposeDelegate 和 presentViewController 的类实例必须相同。

      mailComposer.mailComposeDelegate = hostController;
      
      [hostController presentViewController:mailComposer animated:YES completion:nil];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 2014-03-18
        • 2019-08-11
        相关资源
        最近更新 更多