iOS:应用程序崩溃“ - [MFMailComposeInternalViewController _notifyCompositionDidFinish]”

问题描述 投票:5回答:2

根据崩溃的人在使用iPad时崩溃。他们收到的崩溃错误是-[MFMailComposeInternalViewController _notifyCompositionDidFinish]我不知道这是怎么发生的。这是Crashed: com.apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x0000000c的例外

这是原始数据

Thread : Crashed: com.apple.main-thread
0  libobjc.A.dylib                0x30fa4f46 objc_msgSend + 5
1  MessageUI                      0x252e5f01 -[MFMailComposeInternalViewController _notifyCompositionDidFinish] + 464
2  CoreFoundation                 0x23524294 __invoking___ + 68
3  CoreFoundation                 0x23451435 -[NSInvocation invoke] + 300
4  libdispatch.dylib              0x314f87bb _dispatch_call_block_and_release + 10
5  libdispatch.dylib              0x314f87a7 _dispatch_client_callout + 22
6  libdispatch.dylib              0x314fbfa3 _dispatch_main_queue_callback_4CF + 718
7  CoreFoundation                 0x234e59d1   __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
8  CoreFoundation                 0x234e40d1 __CFRunLoopRun + 1512
9  CoreFoundation                 0x23432211 CFRunLoopRunSpecific + 476
10 CoreFoundation                 0x23432023 CFRunLoopRunInMode + 106
11 GraphicsServices               0x2a7c20a9 GSEventRunModal + 136
12 UIKit                          0x26a3e1d1 UIApplicationMain + 1440
13 MyApp                          0x0009e7e7 main (main.m:16)

不知道我怎么诊断它。

ios objective-c crash mfmailcomposeviewcontroller unrecognized-selector
2个回答
3
投票

MFMailComposeInternalViewController对象被释放并且MFMailComposeInternalViewControllerDelegate被解雇时发生这种崩溃。

确保保留你的MFMailComposeInternalViewController对象,直到委托射击,然后你可以安全地解雇MFMailComposeInternalViewController对象。

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    switch (result) {
        case MFMailComposeResultCancelled:
            break;
        case MFMailComposeResultSaved:
            break;
        case MFMailComposeResultSent:
            break;
        case MFMailComposeResultFailed:
            break;
        default:
            break;
    }
    [controller dismissViewControllerAnimated:YES completion:nil];
}

0
投票

最近我遇到了这次崩溃并对此次崩溃做了解释。假设您有一个ViewController,并确认了Mail Composer委托给它。在呈现Mail Composer之后,ViewController得到去启动(由于某种原因)以及之后发生的事情,Mail Composer尝试与内存中不存在的呈现视图控制器进行通信。

我正在使用容器视图和UITableViewCell(每个单元格都有一个UIViewController作为子节点,我用它来清除当时的didEndDisplying时的单元格内容),这里当我从My ViewController呈现Mail Composer时(它嵌入在UITableViewCell中),didEndDisplay tableView Delegate是因为这个而被调用我的ViewController(嵌入在表视图单元格中)被从内存中删除,所以确认的mailComposerDelegates当时不存在,如果我发送/取消任何对所呈现的Mail Composer View的操作给我的崩溃。

为了解决这个问题,我删除了代码(从显示表视图委托方法的结尾处​​清除单元格内容)。

要确认这一点,请在视图控制器中的deinit()处放置一个断点,用于显示MailComposer。

对不起,我的英语不好。

© www.soinside.com 2019 - 2024. All rights reserved.