【问题标题】:MFMailComposeViewController dismisses right awayMFMailComposeViewController 立即关闭
【发布时间】:2012-12-04 05:44:47
【问题描述】:

情况是 MFMailComposeViewController 将被呈现。我看到它被提交到一半完成,但后来被解雇了。

这是错误:

_serviceViewControllerReady:error: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "操作无法完成。(_UIViewServiceInterfaceErrorDomain error 3.)"

这是我展示 MFMailComposeViewController 的源代码:

-(void) MailExecute {
    if ([MFMailComposeViewController canSendMail]) 
    {
        MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];   
        mailViewController.mailComposeDelegate = self;
        [mailViewController setSubject:NSLocalizedString(@"Check this new look", @"")];
        [mailViewController setMessageBody: @"my new look" isHTML:YES];

        [self presentModalViewController:mailViewController animated:YES];

        [mailViewController release];
    }
    else 
    {
        UIAlertView *alertInternal = [[UIAlertView alloc]
                                      initWithTitle: NSLocalizedString(@"Notification", @"")
                                      message: NSLocalizedString(@"You have not configured your e-mail client.", @"")
                                      delegate: nil
                                      cancelButtonTitle:NSLocalizedString(@"OK", @"")
                                      otherButtonTitles:nil];
        [alertInternal show];
        [alertInternal release];
    }
}

奇怪的是,有时会发生,有时不会。 请帮我解决这个问题!我花了将近 1 个工作日来解决这个问题,但没有成功。

【问题讨论】:

  • 您的应用在设备或模拟器上时出现此异常?
  • 很可能与 mailComposeView 无关,但通常与 UIView 相关:使用 quickLook 得到类似的错误说明。还在调试中...
  • 嗨,JOM,您对此错误有什么新发现吗?
  • 你添加MessageUI.framework了吗?
  • 嘿,想知道你是否设法解决了这个问题。我也有这个问题,但只是在某些情况下,我无法重现它!

标签: objective-c ios mfmailcomposeviewcontroller mfmailcomposer


【解决方案1】:

显示远程视图控制器时可能会出现此问题——视图控制器在另一个进程中运行——如错误消息中的UIViewService reference 所示。

我在显示SKStoreProductViewController(也是remote view controller)时遇到了这个问题。我不确定根本原因是什么;唯一对我来说似乎触发它的是反复呈现视图控制器。

对于SKStoreProductViewController,我能够在loadProductWithParameters:completionBlock: 方法的完成块中检查此错误。 MFMailComposeViewControllerDelegate 是否会给您一个回调并显示有关此错误?可能您所能做的就是监听此错误并向用户显示错误消息。

我们可能都应该为此提交一份苹果雷达。

【讨论】:

    【解决方案2】:

    您的代码看起来是正确的,并且如所述错误消息强烈表明这与UIView 正确(不是MFMail 具体)有关。几乎可以肯定,问题出在代码中的某个地方,并且可能难以解决。

    一些需要寻找的东西:

    1. 同时或错误发生的其他动画或视图控制器转换/关闭 (possibly like this)
    2. 当然是发布/保留问题

    如果这些似乎都不是解决办法,请尝试注释掉调用此方法的视图控制器中发生的所有其他事情,然后看看它是否有效。

    如果您仍然无法使其正常工作,请提供最简单的失败代码版本,以便我们进一步排除故障。 :)

    【讨论】:

    • 感谢您的帮助。我的主管正在接管它。所以不会再查了。
    【解决方案3】:

    您的viewDidDisappear:viewWillDisappear 方法中是否有任何会关闭视图控制器的内容?

    如果没有,您能否为呈现 MFMailComposeViewController 的 ViewController 发布更多代码?

    【讨论】:

    • 我很确定 viewDidDisappear 或 viewWillDisappear 没有任何问题。但我不再调查它了,所以谢谢你的帮助。
    • 我不再调查这个错误了。感谢您的帮助。
    【解决方案4】:

    我知道这是迟到的回复,但可能会对其他人有所帮助。

    刚刚遇到同样的问题,resetting the simulator 为我解决了同样的问题。让我知道这是否有帮助。

    【讨论】:

      【解决方案5】:

      在我将 MFMailComposeViewController 存储在我的类的强属性中而不是局部变量中后,我无法再重现自我关闭行为。

      【讨论】:

      • 您可能想要标记这个问题。这个问题和iOS编程有关吗?
      【解决方案6】:

      我的问题是调用附件函数时参数不正确。如果您在使用电子邮件附件时遇到此问题,我建议您按照this thread 中的解决方案进行操作,如下所示:

      NSString *path = [self getDatabaseFilePath];
      NSData *myData = [NSData dataWithContentsOfFile:path];
      [picker addAttachmentData:myData mimeType:@"application/x-sqlite3" fileName:[path lastPathComponent]];
      

      【讨论】:

        【解决方案7】:

        MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc]init];

        if ([MFMailComposeViewController canSendMail])
        {
            mailComposer.mailComposeDelegate = self;
            [mailComposer setToRecipients:[NSArray arrayWithObject:@"support@kapsie.com"] ];
            [mailComposer setSubject:@"Kapsie App Contact Support"];
            [mailComposer setMessageBody:@"Type Your Feedback message here" isHTML:NO];
            [self presentViewController:mailComposer animated:YES completion:nil];
        }
        

        使用上面的代码并在设备上检查它。

        【讨论】:

          【解决方案8】:

          在 iOS 6 中不推荐使用 modelViewController , 使用

          [self presentViewController:mailView animated:YES completion:nil];
          

          【讨论】:

            【解决方案9】:

            我遇到了同样的问题,解决方法是:

            我删除了整个应用程序外观相关的代码,如

            [[UILabel appearance]setText:@""] 
            

            并替换为代码

            [[UILabel appearanceWhenContainedIn:[self class], nil] setText:@""];
            

            现在它工作正常,所以要小心整体应用程序外观的变化:它可能是导航栏的外观,等等

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-12-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-06-16
              • 2016-10-05
              • 1970-01-01
              相关资源
              最近更新 更多