应用程序在IOS7中的MFMailComposeViewController对象上崩溃

时间:2013-09-27 13:06:08

标签: objective-c ipad

我正在创作

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];

但是,由于未被捕获的异常'NSInvalidArgumentException',应用程序因错误终止应用程序而导致应用程序崩溃且应用程序崩溃,原因是:'Application tried to present a nil modal view controller on target。它在模拟器中工作正常,但在Device中崩溃。 如何将MFMailComposerViewController与IOS 7一起使用。

3 个答案:

答案 0 :(得分:12)

您应该检查MFMailComposeViewController是否能够在尝试发送之前发送您的邮件(例如,用户在iOS设备上没有任何邮件帐户)。

所以在Objective-C的情况下:

MFMailComposeViewController *myMailCompose = [[MFMailComposeViewController alloc] init];

if ([MFMailComposeViewController canSendMail]) {
    myMailCompose.mailComposeDelegate = self;
    [myMailCompose setSubject:@"Subject"];
    [myMailCompose setMessageBody:@"message" isHTML:NO];
    [self presentViewController:myMailCompose animated:YES completion:nil];
} else {
    // unable to send mail, notify your users somehow
}

斯威夫特3:

let myMailCompose = MFMailComposeViewController()

if MFMailComposeViewController.canSendMail() {
    myMailCompose.mailComposeDelegate = self
    myMailCompose.setSubject("Subject")
    myMailCompose.setMessageBody("message", isHTML: false)
    self.present(myMailCompose, animated: true, completion: nil)
} else {
    // unable to send mail, notify your users somehow
}

答案 1 :(得分:3)

虽然检查一个人是否可以发送邮件有助于避免应用程序崩溃,但最好找出它为什么会发生这种情况。 (在我的情况下,相同的应用程序在iPhone 4s上崩溃但在iPhone 5中没有崩溃)

更新: 我发现了以下内容(如果崩溃的原因对你来说很有趣!):MFMailComposeViewController produces a nil object 当我使用gmail应用程序时,我没有激活apple的邮件支持。读完之后我就把它激活了...... ta-da ......一切正常!

答案 2 :(得分:0)

Swift 3 +

     if !MFMailComposeViewController.canSendMail() {
        let composeVC = MFMailComposeViewController()
                composeVC.mailComposeDelegate = self
                composeVC.setToRecipients(["yyy@gmail.com"])
                composeVC.setSubject("subject")
                composeVC.setMessageBody("", isHTML: false)
                self.present(composeVC, animated: true, completion: nil)
}