【问题标题】:UIAlertview delegate will crash when setting delegate to self将委托设置为自身时,UIAlertview 委托将崩溃
【发布时间】:2013-02-11 08:27:44
【问题描述】:

我有这段简单的代码:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Contact" message:@"This contact does not exist yet" delegate:self cancelButtonTitle:@"Ok"  otherButtonTitles:@"Not now", nil];
[alert show];

如果我将委托设置为“nil”,一切都很好。但是,如果我将委托设置为“self”并添加 clickedButtonAtIndex 或 didDismissWithButtonIndex 委托,则应用程序会因 EXC_BAD_ACCESS 而崩溃

【问题讨论】:

  • 你把 放在你的 .h 中了吗?
  • 请检查你的.h文件你有#import
  • 是的,在标题中有
  • 您的应用程序何时崩溃?显示还是点击?
  • 当我点击任一按钮时

标签: xcode crash uialertview exc-bad-access


【解决方案1】:

我认为你没有设置 alertView 委托方法。

首先在.h文件中设置alertView委托协议。

     @interface MainViewController : UIViewController<UIAlertViewDelegate>

然后实现这个方法,就可以正常工作了

  -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
 {
   switch (buttonIndex)
  {
    case 0:

        break;
    case 1:
        break;

    default:
        break;
  }
}

【讨论】:

    【解决方案2】:

    您的问题是您的对象(自我)不再存在!但是 alertview 尝试访问它,所以你得到 EXC_BAD_ACCESS。检查您的委托对象(自身)是否还活着!

    【讨论】:

    • 这似乎是一个好点。但是按照iOS流程,如果我调用一个包含alert的类,iOs确实会显示alert并立即返回给调用者,所以事实上self永远不会和alert一起存在。我可以委托给调用者吗?
    • 调用者是你的代表!
    • 我已将 'clickedButtonAtIndex 放在调用类中,但它从未被调用(至少不再发生崩溃)。我什至在调用者中放了一个 didPresentAlertView 但它也从未被调用过。
    【解决方案3】:

    问题是由于我的流程造成的。我有一个调用 URL 的类。 Viewcontroller 实际上在响应来自服务器之前很久就完成了。因此,我必须在调用者中实现一个 NSRunLoop 以等待服务器通信完成。基于被调用例程中的一些 ExitCode,我只能显示一个警报并让代理处理按下的按钮。无论如何感谢 Chakalaka 让我走上正轨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多