使用MFMailComposeViewController时出现问题

我有一个棘手的问题。 在我的一个应用程序中,有超过150,000次下载…我遇到了一个很少发生的问题,我似乎无法弄明白。

问题如下:在用户可以通过电子邮件共享列表的视图中,我使用MFMailComposeViewController打开邮件窗口。 但是,在少数情况下,应用程序似乎使用邮件编写器出现问题。 用户按下共享按钮,邮件窗口向上滑动,等待约1-2秒,然后再次关闭。 邮件窗口中没有内容,但我确实向其发送数据。 我自己无法在任何设备或模拟器中重新创建问题,但是有一位同事。 我在他的手机上使用XCode运行应用程序并在日志中获得以下内容:

 2013-03-01 14:43:39.604 appname[318:907]  timed out waiting for fence barrier from com.apple.MailCompositionService 2013-03-01 14:43:39.631 appname[318:907] viewServiceDidTerminateWithError: Error Domain=XPCObjectsErrorDomain Code=2 "The operation couldn't be completed. (XPCObjectsErrorDomain error 2.)" 

我用谷歌搜索了“从com.apple.MailCompositionService等待栅栏屏障超时”的错误,但无法找到任何帮助。

有没有人有这方面的经验? 我该如何解决?

我打开视图的代码:

 -(void)displayComposerSheetWithBodyString:(NSString *)aBody { if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController *picker = [[MFMailComposeViewController alloc]init]; picker.mailComposeDelegate = self; [picker setSubject:@"Lista"]; NSString *emailBody = aBody; [picker setMessageBody:emailBody isHTML:NO]; [self.navigationController presentModalViewController:picker animated:YES]; } else { [[[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Din enhet är inte redo att skicka e-post. Kontrollera dina inställningar", nil) message:nil delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil] show]; } } 

不确定你是否解决了这个问题,但我最近在我的项目中遇到了它。

我做的一个解决方法是在早期阶段分配和启动MFMailComposeViewController,并在需要时将其保存在一个静态变量中 ,获取静态MFMailComposeViewController实例并显示它。

它似乎对我有用,希望它也适合你。

a有同样的问题,这个修复帮助了我:

https://twitter.com/christian_beer/statuses/321295533077565440

“@ nathangaskin很好……很久以前:)但是如果我没记错的话,我从UIAppearance代码中删除了自定义字体后就可以了”

这对我来说可以。

另外,第二个选项是简单地将显示调用包装成

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 

我有完全相同的问题。 我想我已经把它钉在了制定消息体字符串所需的时间。

评论内容

  //Message Body NSString *msgBody = [NSString stringWithFormat: @"I noticed these results in pocketKPI. The %@ was at %@ which is a variance of %@(or %@) to the target defined as %@. When you have some time let's discuss.", self.itemToView.kpiName, [DFSKpiFormatter formatNumberAsString:self.itemToView.currentValue], [self.itemToView determineVarianceLabelText], [self.itemToView determineVariancePercentLabelText], [DFSKpiFormatter formatNumberAsString:self.itemToView.targetValue]];