我正在创作
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
但是,由于未被捕获的异常'NSInvalidArgumentException'
,应用程序因错误终止应用程序而导致应用程序崩溃且应用程序崩溃,原因是:'Application tried to present a nil modal view controller on target
。它在模拟器中工作正常,但在Device中崩溃。
如何将MFMailComposerViewController
与IOS 7一起使用。
答案 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)
}