MFMailComposeViewController立即消失

24

情况是MFMailComposeViewController将要被呈现。我看到它已经呈现了一半,但后来它被取消了。

这是错误信息:

_serviceViewControllerReady:error: 错误域=_UIViewServiceInterfaceErrorDomain 代码=3 "无法完成操作。(_UIViewServiceInterfaceErrorDomain 错误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
你的应用在设备或模拟器上出现了这个异常吗? - DD_
1
很可能与mailComposeView无关,而是与UIView有关:使用quickLook时出现了类似的错误提示。仍在调试中... - JOM
假设有一个答案解决了这个问题,或者你找到了一个解决方案,你能接受或输入它来关闭这个未解决的问题吗? - David H
1
嘿,想问一下你是否解决了这个问题。我也遇到了这个问题,但只有在某些情况下,并且我无法再现它! - Ants
我在使用QuickLook时遇到了相同的错误信息,问题是我正在加载一个宽度超过1300像素的PDF。当我将PDF旋转使其宽度约为700像素时,它可以正常工作。 - jankins
显示剩余3条评论
9个回答

3
这个问题可能会在显示远程视图控制器时出现 -- 运行在另一个进程中的视图控制器 -- 此错误信息中的 UIViewService reference 所示。我在显示 SKStoreProductViewController 时遇到过这个问题,它也是一个 远程视图控制器。我不确定根本原因是什么;唯一似乎触发它的事情是重复呈现视图控制器。对于 SKStoreProductViewController,我能够在 loadProductWithParameters:completionBlock: 方法的完成块中检查此错误。 MFMailComposeViewControllerDelegate 是否给您关于此的回调错误?也许你能做的就是监听此错误并向用户显示错误消息。我们两个都应该向苹果报告此问题。

2

您的代码看起来是正确的,正如错误消息所强烈暗示的那样,这与UIView有关(而不是特定于MFMail)。问题几乎肯定在您的代码中的其他地方,可能很难进行故障排除。

一些要注意的事项:

  1. 同时或不正确地发生其他动画或视图控制器转换/取消显示(可能像这样
  2. 当然还有释放/保留问题

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

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


谢谢你的帮助。我的主管已经接手了,所以不会再检查它了。 - Truong

0
对于我来说,问题是在调用附件函数时传入了错误的参数。如果你遇到了邮件附件的这个问题,我建议按照这个帖子中的解决方案进行操作,具体如下:
NSString *path = [self getDatabaseFilePath];
NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:@"application/x-sqlite3" fileName:[path lastPathComponent]];

0

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

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];
}

使用上述代码并在设备上检查。


0

你的viewDidDisappear:viewWillDisappear方法中是否有任何会关闭视图控制器的代码?

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


我相信viewDidDisappear或viewWillDisappear没有任何问题。 但是我不再调查了,感谢你的帮助。 - Truong
我不再调查这个错误了。感谢您的帮助。 - Truong

0

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

刚刚遇到了同样的问题,通过重置模拟器,我解决了这个问题。如果这有帮助,请告诉我。


0

在我将MFMailComposeViewController存储在类的强属性中而不是本地变量中之后,我无法再次复现自我解除行为。


您可能想要为此问题打标签。这个问题与iOS编程有关吗? - Jimmy Smith

-1

我也遇到了同样的问题,解决方法如下:

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

[[UILabel appearance]setText:@""] 

并用代码替换

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

现在它正常工作了,因此请注意整个应用程序外观的变化:可能是导航栏外观等等。


-1

在iOS 6中,modelViewController的使用已被弃用,请改用

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接