编辑:我最终联系了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];
调用此功能后,电子邮件视图会出现,但后来没有响应。
答案 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;