iOS6: MFMailComposeViewController加载缓慢且闪烁黑屏;MailCompositionS开始占用内存

16
在iOS 6上,使用MFMailComposeViewController发送几封电子邮件后,打开邮件屏幕会变得非常缓慢 - 开始时几秒钟内没有填充任何字段(没有主题、正文等),最终(大约发送8条消息后)用户会看到一个黑屏几秒钟,然后才能正确显示电子邮件视图控制器。
每次显示黑屏之前,日志都会输出以下行:
[MFMailComposeRemoteViewController:....] timed out waiting for fence barrier from com.apple.MailCompositionService 此外,在iOS 6上使用MFMailComposeViewController会导致MailCompositionS进程开始占用内存(在我的iPhone上达到了大约260MB)。我认为这是MFMailComposeViewController显示问题的原因。
在iOS 5上一切正常。这个问题只发生在iOS 6上。
有人找到了解决这个问题的方法吗?
谢谢!
代码是标准的,但我还是会把它包含在内:
-(IBAction)doEmailLog:(id)sender 
{    
    if( [self canSendMail] )
    {       
        // create the compose message view controller
        MFMailComposeViewController* mailComposer = [[MFMailComposeViewController alloc] init];

        // this class will handle the cancel / send results
        mailComposer.mailComposeDelegate = self;

        // fill in the header and body
        [mailComposer setSubject:@"My Subject"];
        [mailComposer setMessageBody:@"My message body" isHTML:NO];

        // attach log file
        if ([[NSFileManager defaultManager] fileExistsAtPath:filename])
        { 
            NSData *data = [NSData dataWithContentsOfFile:filename];
            [mailComposer addAttachmentData:data mimeType:@"text/plain" fileName:filename];
        }

        // show the view controller
        [self presentViewController:mailComposer animated:YES completion:^{LogTrace(@"Presented mail view controller");}];
    }
    else
    {
        ...
    }
}

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    ...

    // dismiss the compose message view controller
    [self dismissViewControllerAnimated:YES completion:^{LogTrace(@"Finished dismissing mail controller");}];
}

现在是2013年11月..解决方法似乎是使用全局的MFMailComposeViewController..不要使用本地的。奇怪!这里有一个完全相同的问题...https://dev59.com/smUp5IYBdhLWcg3wmYgt.. "exu"首先提出了解决方案,谢谢exu! - Fattie
2个回答

3
在iOS 6中,邮件组合器是您应用程序内的独立应用程序。
:: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/

如果您正在使用ARC,那么代码看起来很好,否则它会泄漏,在iOS6上可能导致XPC远程问题。

如果一切都正常,我会怀疑苹果新的XPC处理中存在错误。


谢谢回复!是的 - 我正在使用ARC,所以这些片段中不应该有任何泄漏。我看过Ole的博客,虽然它非常有信息量,但没有提供解决方案。仍在寻找解决方案... - Chrissy Harris
2
这个问题的原因非常奇怪...启动MFMailComposeViewController的视图控制器有一个导航栏。如果你在启动视图控制器的viewWillAppear()和viewWillDisappear()函数中更改导航栏上按钮的背景图片,MailCompositionServiceS每次启动和关闭MFMailComposeViewController时都会使用并占用7-10MB的内存。这对我来说完全没有意义,但当我们停止在UIBarButtonItems上调用setBackgroundImage()时,MailCompositionServiceS中的内存问题就停止了。真是匪夷所思... - Chrissy Harris
你找到这个问题的解决方案了吗? - Krzysztof Romanowski
是的。我也遇到了同样的问题。我退出了模拟器并重新启动它,问题得以解决(?) - JohnQ
多么糟糕的问题啊。我们有很多测试设备,所以“幸运地”找到了问题。只使用全局组合器的解决方法似乎非常可靠。希望能对某些人有所帮助。 - Fattie

0

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