在MFMailComposeViewController实现中崩溃

时间:2015-06-18 06:31:05

标签: mfmailcomposer

当我尝试在MFMailComposeViewController中执行已发送或取消按钮操作时,我的应用崩溃了。

这是我的代码。 我已导入消息框架并在.h文件中添加了委托。

     NSString *emailTitle = @"Test Email";

                NSString *messageBody = @"Welcome Guest";

                NSArray *recipentsArray = [[NSArray alloc]initWithObjects:@"xxx@gmail.com", nil];
            [[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

             [[UINavigationBar appearance] setBackgroundColor:nil];
                MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];

                mc.mailComposeDelegate = self;

                [mc setSubject:emailTitle];

                [mc setMessageBody:messageBody isHTML:NO];

                 [mc setToRecipients:recipentsArray];

                [self presentViewController:mc animated:YES completion:NULL];(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
        [self dismissViewControllerAnimated:YES completion:NULL];
    }

这就是我的mf邮件作曲家的样子:----

enter image description here

1 个答案:

答案 0 :(得分:0)

只需在全局中设置 MFMailComposeViewController *mc 即可。 我的意思是在这个方法之外宣布它。它崩溃了,因为在方法结束时你的mc被解除分配。

<强>接口

@interface Demo()
{
   MFMailComposeViewController *mc;
}
@end

<强>实施

-(void)ShareViaEmail {

objMailComposeController = [[MFMailComposeViewController alloc] init];
objMailComposeController.mailComposeDelegate = self;

if ([MFMailComposeViewController  canSendMail]) {

    [objMailComposeController setSubject:@"Hello"];
    [objMailComposeController setMessageBody:@"This is Body of Message" isHTML:NO];

        NSData *ImageData = [NSData dataWithContentsOfFile:self.aStrSourceName];
        NSString *mimeType;

        if ([[self CheckExtensionOfURL:self.aStrSourceName]isEqualToString:@"Image"]) {
            mimeType = @"image/png";
        }
        else if ([[self CheckExtensionOfURL:self.aStrSourceName]isEqualToString:@"PDF"]) {
            mimeType = @"application/pdf";
        } else if ([[self CheckExtensionOfURL:self.aStrSourceName]isEqualToString:@"Audio"]) {
            mimeType = @"audio/mpeg";
        } else if ([[self CheckExtensionOfURL:self.aStrSourceName]isEqualToString:@"Video"]) {
            mimeType = @"video/mp4";
        }


        [objMailComposeController addAttachmentData:ImageData mimeType:mimeType fileName:@"attachement"];

    }
    [self.navigationController presentViewController:objMailComposeController animated:YES completion:Nil];

}

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {

switch (result) {
    case MFMailComposeResultCancelled:
        [self ShowAlertView:kMsgMailCancelled];
        break;

    case MFMailComposeResultFailed:
         [self ShowAlertView:kMsgMailFailed];
        break;

    case MFMailComposeResultSaved:
         [self ShowAlertView:kMsgMailSaved];
        break;

    case MFMailComposeResultSent:
         [self ShowAlertView:kMsgSent];
        break;
    default:
        break;
}

// CHECK OUT THIS, THIS MIGHT BE IN YOUR CASE
[self.navigationController dismissViewControllerAnimated:controller completion:nil];


}