我正在开发一个应用程序,允许用户拍照并通过邮件发送(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上测试应用程序时,同样的事情,单击确定时会崩溃。
您对如何解决此问题有任何想法吗?
非常感谢您的帮助和建议
答案 0 :(得分:3)
问题很可能是因为您将提醒视图的delegate
设置为self
然后解除了self
。然后,当您在警报视图上点击“确定”时,它会尝试访问其委托,但代理人已被解雇,因此应用程序崩溃。
有两个修复:
nil
传递给delegate
参数。您无需处理任何警报视图操作。代码:
[controller dismissViewControllerAnimated:YES completion:nil];
答案 1 :(得分:0)
如果我正确解释您的问题,则在您显示UIAlertView之后,用户点击“确定”以解除您的UIAlertView崩溃。如果是这样,那么崩溃最有可能发生在您的UIAlertView委托中:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
}
尝试在该方法的顶部附近设置断点,然后逐步执行代码,直到发生错误(按“确定”后)。
在那里,您可能会发现您正在尝试访问不再存在的对象。如果你在那里找不到错误,那么最好发布你的didDismissWithButtonIndex:方法的代码。