尝试发送邮件和应用程序崩溃

Posted

技术标签:

【中文标题】尝试发送邮件和应用程序崩溃【英文标题】:Trying to send mail and app crashed 【发布时间】:2015-03-08 16:54:14 【问题描述】:

我正在尝试使用 FMailComposeViewController 发送电子邮件。当我尝试通过调用 presentModalViewController 发送邮件时,应用程序崩溃。在 emulateR 中,它一直在设备上崩溃,它崩溃了一半时间。

我没有收到错误消息,但应用程序冻结并且调试器显示它正在 int main(int argc, char * argv[]) @autoreleasepool 返回 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 并且应用程序总是在模拟器中崩溃,大约一半的时间在 iPhone 上。

代码:

- (IBAction)aEmail:(id)sender 
if([MFMailComposeViewController canSendMail])

    MFMailComposeViewController *mailCtrl = [[MFMailComposeViewController alloc] init];
    [mailCtrl setSubject:@"Your TellaFortune Card Reading"];
    [mailCtrl setToRecipients:[NSArray arrayWithObject:@"tedpottel@yahoo.com"]];
    mailCtrl.mailComposeDelegate = self;

    [mailCtrl setMessageBody:  @"hello"  ishtml: false];

 // CRASHES ON THID LINE
    [self presentModalViewController:mailCtrl animated:NO];
    //      [mailCtrl release];


else

    UIAlertView *alert=[[ UIAlertView alloc]
                        initWithTitle:@"Cannot send email"
                        message: @"Please check internet connection and email set up"
                        delegate: self
                        cancelButtonTitle:@"Ok"
                        otherButtonTitles: nil];

    [alert show];




///////////////////////////////////////////////////////////////////////////////////////////
// if you do not have thid methed when sending emsil, app will freez after
// sent or cancel button has been pressed.

- (void)mailComposeController:(MFMailComposeViewController *)controller
      didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error 
[self dismissModalViewControllerAnimated:YES];
NSLog(@"Email result: %@", result==MFMailComposeResultCancelled?@"Cancelled":
      result==MFMailComposeResultSaved?@"Saved":
      result==MFMailComposeResultSent?@"Sent":
      result==MFMailComposeResultFailed?@"Failed":@"Unknown");

【问题讨论】:

请使用您在控制台中看到的错误消息更新帖子。 你在模拟器上测试吗?我已经看到它在模拟器上很不稳定。在真实设备上进行测试。也尝试使用[self presentViewController] 【参考方案1】:

将 mailctrl 放在 ivar 中 - 你现在没有强引用它。

【讨论】:

没有必要对正在呈现的控制器保持强引用。 嗨,你能把它放在一个 lvar 中解释一下你的意思吗,谢谢 您正在使用方法中的局部变量创建对象。难道你不知道什么是客观的 c ivar - 一个实例变量。您可以将 'MFMailComposeViewController *mailCtrl' 设为实例变量,将其设置在您现在执行的位置,并在委托方法中将其设为 nil(将其设置为 nil),当其完成工作时。

以上是关于尝试发送邮件和应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ACRA 发送 Android 崩溃报告

尝试访问 android 应用程序中的联系人不断崩溃

Kivy buildozer.spec 错误 - 尝试构建一个发送电子邮件的 android 应用程序

iPhone- 使用 SKPSMTPMessage 的应用程序崩溃

Fabric 没有从过去几天发送崩溃邮件

尝试使用电子邮件和密码创建帐户时,Flutter 应用程序崩溃