iphone - 关闭 MFMailComposeViewController 会导致 EXC_BAD_ACCESS

标签 iphone crash email

我正在显示一个 MFMailComposeViewController,如下所示:

- (IBAction) contactUs: (id) sender {
    [Tracker trackContactUsPressed: [MFMailComposeViewController canSendMail]];

    if ([MFMailComposeViewController canSendMail] == NO) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Email Error"
                                                        message: @"Email has not been configured on this device.  Please send us an email at\nFOO@BAR.com"
                                                       delegate: self
                                              cancelButtonTitle: @"OK"
                                              otherButtonTitles: nil];
        [alert show];
        [alert release];
    } else {

        MFMailComposeViewController *controller = [[[MFMailComposeViewController alloc] init] autorelease];

        [controller setSubject:@"Comments about FOO"];            

        [controller setToRecipients: [NSArray arrayWithObject: @"FOO@BAR.com"]];
        [controller setMailComposeDelegate: self];

        [[self parentViewController] presentModalViewController:controller animated:YES];
    }
}

然后我的代表看起来像这样:

- (void) mailComposeController: (MFMailComposeViewController *) controller didFinishWithResult: (MFMailComposeResult) result error: (NSError *) error {
    [[self parentViewController] dismissModalViewControllerAnimated: YES];
}

但是,一旦调用委托(delegate)并且 View 消失,我就会收到 EXC_BAD_ACCESS。回溯是这样说的:

#0  0x00000000 in ?? ()
#1  0x0065a2d9 in -[UIWindowController transitionViewDidComplete:fromView:toView:] ()
#2  0x0044a905 in -[UITransitionView notifyDidCompleteTransition:] ()
#3  0x003f1499 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] ()
#4  0x003f132b in -[UIViewAnimationState animationDidStop:finished:] ()
#5  0x02631db0 in run_animation_callbacks ()
#6  0x02631c6f in CA::timer_callback ()
#7  0x0284bf73 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#8  0x0284d5b4 in __CFRunLoopDoTimer ()
#9  0x027a9dd9 in __CFRunLoopRun ()
#10 0x027a9350 in CFRunLoopRunSpecific ()
#11 0x027a9271 in CFRunLoopRunInMode ()
#12 0x0305500c in GSEventRunModal ()
#13 0x030550d1 in GSEventRun ()
#14 0x003cfaf2 in UIApplicationMain ()
#15 0x000023c5 in main (argc=1, argv=0xbfffefcc) at main.m:14

我似乎无法弄清楚出了什么问题。据我所知,这之前可以与我们使用的 3.x SDK 一起使用(我们发布了它和所有内容!)。现在使用新的 SDK (4.1) 似乎失败了。我不确定这是否相关。

有人知道这是怎么回事吗?

最佳答案

我发现了问题。

我们正在使用一个名为 ShareKit 的库来进行一些 Twitter 和 Facebook 集成。由于我们已经有了自己的电子邮件表单,因此不需要 ShareKit 来处理它,因此我们删除了 ShareKit 的电子邮件处理文件。

一切都很好,除了在初始化时,ShareKit 执行了以下操作:

SHKSwizzle([MFMailComposeViewController class], @selector(viewDidDisappear:), @selector(SHKviewDidDisappear:)); 

SHKSwizzle 基本上用 SHKviewDidDisappear 替换了 MFMailComposerViewController 的 viewDidDisappear: 方法:(不要问我为什么......我认为这太可怕了)。

无论如何,事实证明 SHKviewDidDisappear 位于 ShareKit 的邮件处理程序中,因此删除该文件会使代码跳转到超空间并严重崩溃。再次恢复文件即可解决问题。

呃。

感谢大家的帮助!

关于iphone - 关闭 MFMailComposeViewController 会导致 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4065927/

相关文章:

visual-studio-2015 - C++/CLI 应用程序启动时崩溃 (_register_onexit_function)

ios - 支持的方向与应用程序没有共同的方向,并且 [GADFullScreenAdViewController shouldAutorotate] 返回 YES

android - ACTION_SEND 强制发送电子邮件

Php 确认电子邮件未发送

iphone - 以编程方式更改标签栏和导航栏的颜色

iphone - NSLocale PreferredLanguages objectAtIndex :0 always return "en"

android - Android中的线程导致手机崩溃

python - Flask-用户注册 : add one more mail id

iphone - 手动构建 View 时如何处理 UIViewController 中的 View 初始化顺序?

iphone - iOS 项目更新 Xcode 4.2 到 Xcode 4.5