iOS应用程序在警报视图解雇时崩溃

时间:2013-08-21 13:57:26

标签: ios uiviewcontroller delegates uialertview presentmodalviewcontroller

我在视图控制器的方法中遇到了一些UIAlertView I实例的问题。这个UIViewController来自另一个UIViewController,在某个时刻我会以这种方式从实例方法中显示UIAlertView

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Upload Error", @"")
                                                    message:NSLocalizedString(@"It was not possible to complete the upload, do you want to try again?", @"")
                                                   delegate:self
                                          cancelButtonTitle:NSLocalizedString(@"Cancel", @"")
                                          otherButtonTitles:NSLocalizedString(@"Accept", @""), nil];

[alertView show];

我可以在显示此警报视图之前或之时关闭显示的UIViewController,这导致当呈现的视图控制器不再出现在屏幕上时会显示此类警报视图,因此警报视图显示在呈现视图控制器的顶部。然后,当点击其中一个警报视图的按钮时,应用程序崩溃,我想因为它的委托是呈现的视图控制器而且它不存在。我怎么能避免这种情况呢?

谢谢!

2 个答案:

答案 0 :(得分:0)

在您的呈现控制器即将被解除之前调用dismissWithClickedButtonIndex:animated:来解除警报视图,可能在其viewWillDisappear:或适当的方法中。或者,如果您希望即使在呈现的视图控制器消失后警报视图仍保留在屏幕上,请将呈现视图控制器参考传递给呈现的视图控制器,并将alertView的委托设置为呈现视图控制器。

答案 1 :(得分:0)

答案取决于您想要实现的行为。

首先检查UIAlertView documentation

  

委托:接收方的委托,如果没有委托,则为零。

  • 如果你不想根据用户做'特别'的话 动作,传递null。
  • 如果你想做'特别的'取决于 用户操作创建一个特殊的委托来处理用户操作并使其保持活动状态。