iOS应用程序在点击按钮时崩溃

时间:2014-07-11 16:21:02

标签: ios objective-c sigabrt

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

   - (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];
}

点击"确定"在模拟器中,Xcode突出显示main.m文件中的代码,其中包含短语" Thread 1:signal SIGABRT":

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

当我在iPhone上测试应用程序时,同样的事情,单击确定时会崩溃。

您对如何解决此问题有任何想法吗?

非常感谢您的帮助和建议

2 个答案:

答案 0 :(得分:3)

问题很可能是因为您将提醒视图的delegate设置为self然后解除了self。然后,当您在警报视图上点击“确定”时,它会尝试访问其委托,但代理人已被解雇,因此应用程序崩溃。

有两个修复:

  1. 创建提醒视图时,将nil传递给delegate参数。您无需处理任何警报视图操作。
  2. 解除邮件控制器时,请执行以下操作:
  3. 代码:

    [controller dismissViewControllerAnimated:YES completion:nil];
    

答案 1 :(得分:0)

如果我正确解释您的问题,则在您显示UIAlertView之后,用户点击“确定”以解除您的UIAlertView崩溃。如果是这样,那么崩溃最有可能发生在您的UIAlertView委托中:

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

尝试在该方法的顶部附近设置断点,然后逐步执行代码,直到发生错误(按“确定”后)。

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