2014-07-11 24 views
0

我正在开发一个应用程序,允许用户通过邮件拍照并发送(xcode版本5.1.1)。邮件发送后,确认弹出消息:iOS应用程序崩溃点击按钮

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error{ 
    switch (result) 
    { 
    case MFMailComposeResultCancelled: 
     [[[UIAlertView alloc]initWithTitle:@"Message Cancelled" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]show]; 
     break; 
    case MFMailComposeResultSent: 
     [[[UIAlertView alloc]initWithTitle:@"Message Sent" message:@"Thank you for your help." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]show];     break; 
    default: 
     break; 
    } 
    [self dismissViewControllerAnimated:NO completion:nil]; 
} 

关于在模拟器“OK”点击,Xcode中突出了main.m文件代码,短语“主题1:信号SIGABRT” :

int main(int argc, char * argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

当我在iPhone上测试的应用程序,同样的事情,它点击OK时崩溃。

你对如何解决这个问题有什么想法吗?

提前感谢您的帮助和建议

+0

尝试添加异常断点并重现崩溃:http://stackoverflow.com/questions/17802662/exception-breakpoint-in-xcode – BergQuester

+0

我无法重现您的问题。用我的测试中的委托方法显示alertView。你向viewController声明了'MFMailComposeViewControllerDelegate'?请显示您如何调用'MFMailComposeViewController'并设置邮件。 – Sebastian

+1

要了解如何调试,请参阅http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1 – rmaddy

回答

3

的问题很可能是由您设置的事实引起了警报视图的delegateself,然后您关闭self。当您在警报视图上点击确定时,它会尝试访问其委托,但代表已被解散,从而导致应用程序崩溃。

有两种解决方法:

  1. 通行证nildelegate参数创建警报视图时。您无需处理任何警报视图操作。
  2. 当解聘邮件控制,做到这一点通过如下:

代码:

[controller dismissViewControllerAnimated:YES completion:nil]; 
+0

非常感谢!完美的作品! – mdicamp

0

如果我正确地解释你的问题,这是你显示UIAlertView中,用户点击之后点击“确定”关闭你的UIAlertView,你会得到崩溃。如果是这样,那么崩溃是最有可能在你的UIAlertView中委托内部发生:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
} 

尝试设置一个断点接近该方法的顶部,然后通过代码,直到发生错误(按“确定”后)。

在那里,您可能会发现您试图访问不再存在的对象。如果在那里找不到错误,那么最好发布didDismissWithButtonIndex:方法的代码。

相关问题