尝试发送邮件和应用程序崩溃
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),当其完成工作时。以上是关于尝试发送邮件和应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Kivy buildozer.spec 错误 - 尝试构建一个发送电子邮件的 android 应用程序