用户升级iOS后,MFMailComposer挂起应用程序 - 没有崩溃报告

时间:2013-03-08 00:23:07

标签: iphone ios objective-c ipad

编辑:我最终联系了Apple DTS。在我从受影响的用户提供了一个stackshot后,DTS决定我应该向Apple BugReporter提交一个错误。所以,在这一点上,我认为这是MFMailComposer的一个问题,但它没有得到解决。 Apple bug号码是13602051

我有一个在应用中一次又一次出现的错误。

某些升级其iOS版本的用户报告他们无法再在我的应用中使用电子邮件导出,该应用使用MFMailComposer。该应用程序冻结,并且不会生成崩溃报告。

我的代码非常简单,我无法重现报告的错误,但许多用户现在已经说过这种情况发生在iOS更新之后。这是代码:

// using ARC, so no reference counting
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
@autoreleasepool {
  if (gpxFilePath) {
    NSData *gpx = [NSData dataWithContentsOfFile:gpxFilePath];
    [controller addAttachmentData:gpx mimeType:@"text/gpx" fileName:[self cleanFileName]];
    gpx = nil;
  }
}
[controller setSubject:subject];
[controller setMessageBody:body isHTML:YES];
[[MAP_APP_DELEGATE mainController] presentModalViewController:controller animated:YES];

调用此功能后,电子邮件视图会出现,但后来没有响应。

2 个答案:

答案 0 :(得分:0)

我正在使用iOS 6.1的下一个代码,它适用于我。

if ([MFMailComposeViewController canSendMail]) {
    MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc]init];
    mailer.mailComposeDelegate = self;
    [mailer setSubject:@"subject"];
    User *user = [user_array objectAtIndex:1];
    NSArray *toRecipients = [NSArray arrayWithObjects:@"mail address", nil];
    [mailer setToRecipients:toRecipients];
    NSArray *cc = [NSArray arrayWithObjects:@"mail address", nil];
    [mailer setCcRecipients:cc];
    NSDictionary *dic = [one array objectAtIndex:0];

    NSString *description = [dic objectForKey:@"Description"];

    NSString *emailBody = description;

    [mailer setMessageBody:emailBody isHTML:NO];
    [self presentViewController:mailer animated:YES completion:nil];
    [mailer release];
}
else
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure"
                                                    message:@"Your device doesn't support the composer sheet"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles: nil];
    [alert show];
    [alert release];
}

请记住,模拟器无法发送电子邮件,因此在这种情况下会显示警报视图。

注1:iOS 6.0中不推荐使用presentModalViewController

注意2:尝试发送没有数据的电子邮件,以检查这是否是导致问题的原因

答案 1 :(得分:0)

这可以解决您的问题。

[[MAP_APP_DELEGATE mainController] presentModalViewController:controller animated:YES];

 controller = nil;