MFMailComposeViewController马上解散

时间:2012-12-04 05:44:48

标签: objective-c ios mfmailcomposeviewcontroller mfmailcomposer

情况是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个工作日来解决这个问题,但没有成功。

9 个答案:

答案 0 :(得分:3)

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

我在显示SKStoreProductViewController时出现此问题,SKStoreProductViewController也是remote view controller。我不确定根本原因是什么;似乎唯一触发它的是重复呈现视图控制器。

对于loadProductWithParameters:completionBlock:,我能够在MFMailComposeViewControllerDelegate方法的完成块中检查此错误。 {{1}}是否会为您提供有关此错误的回调?可能您所能做的就是侦听此错误并向用户显示错误消息。

我们都应该就此提出一个苹果雷达。

答案 1 :(得分:2)

您的代码看起来是正确的,并且如上所述,错误消息强烈暗示这与UIView正确(具体而言不是MFMail)有关。问题几乎肯定存在于代码中的其他位置,并且可能难以排除故障。

要寻找的一些事情:

  1. 同时或不正确地发生其他动画或视图控制器转换/解雇(possibly like this
  2. 发布/保留问题,当然
  3. 如果这些都不是修复,请尝试注释掉调用此方法的视图控制器中发生的所有其他事情,然后查看它是否有效。

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

答案 2 :(得分:0)

您的viewDidDisappear:viewWillDisappear方法中是否有任何可以解除视图控制器的内容?

如果没有,您可以为呈现MFMailComposeViewController的ViewController发布更多代码吗?

答案 3 :(得分:0)

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

刚才面临同样的问题, resetting the simulator 对我来说同样的问题也适用。如果这有帮助,请告诉我。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)

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

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

答案 8 :(得分:-1)

我面临同样的问题,解决方案是:

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

[[UILabel appearance]setText:@""] 

并替换为代码

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

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