使用MFMailComposeViewController时出现问题

Pau*_*len 27 objective-c ios mfmailcomposer mfmailcomposeviewcontroller

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

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

2013-03-01 14:43:39.604 appname[318:907] <MFMailComposeRemoteViewController: 0x1ebfb100> 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.)"
Run Code Online (Sandbox Code Playgroud)

我搜索了错误"从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];
    }
}
Run Code Online (Sandbox Code Playgroud)

exu*_*exu 11

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

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

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

  • 此外,您几乎肯定必须在每次使用后"循环"全局MFMailComposeViewController."重复使用"同一个是不可靠的.有一个全局例程,它释放然后重新初始化单例MFMailComposeViewController.完成后每次调用它.多么麻烦. (4认同)

tt.*_*lew 5

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(), ^{
Run Code Online (Sandbox Code Playgroud)