5

我正在创作

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

但是选择器还为零,并且应用程序由于未捕获的异常而崩溃并出现错误终止应用程序'NSInvalidArgumentException',原因:'Application tried to present a nil modal view controller on target。它在模拟器中运行良好,但在 Device 中崩溃。如何MFMailComposerViewController与 IOS 7 一起使用。

4

3 回答 3

14

您应该在尝试发送邮件之前检查 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
}
于 2013-09-27T13:13:32.363 回答
3

虽然检查一个人是否可以发送邮件有助于避免应用程序崩溃,但很高兴找出它实际发生的原因。(在我的情况下,同一个应用程序在 iPhone 4s 上崩溃,但在 iPhone 5 上没有)

更新:我发现以下内容(如果您对崩溃的原因感兴趣!):MFMailComposeViewController 产生一个 nil 对象 当我使用 gmail 应用程序时,我没有激活苹果的邮件支持。读完这篇文章后,我激活了它,然后…… ta-da ……一切正常!

于 2013-10-09T15:25:49.417 回答
0

斯威夫特 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)
}
于 2017-07-13T19:26:24.527 回答