根据崩溃的人在使用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)
不知道我怎么诊断它。
当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];
}
最近我遇到了这次崩溃并对此次崩溃做了解释。假设您有一个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。
对不起,我的英语不好。