单击UIAlertView时崩溃

Xav*_*ero 2 iphone uialertview ios

当我单击时UIAletView,我收到以下错误.

alertView:clickedButtonAtIndex:]: message sent to deallocated instance 0x84c7010
Run Code Online (Sandbox Code Playgroud)

这是我用过的代码.

    UIAlertView  *testAlert = [[ UIAlertView alloc]initWithTitle:messageTitle message:messageBody delegate:self cancelButtonTitle:messageClose otherButtonTitles:messageTryAgain, nil];
    testAlert.tag = 2;
    [testAlert show];
    [testAlert release];
Run Code Online (Sandbox Code Playgroud)

我有委托方法

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

}
Run Code Online (Sandbox Code Playgroud)

单击时UIAlertView,即使在控件到达委托方法之前,应用程序也会崩溃.可能是什么原因.我究竟做错了什么?

Jes*_*ack 8

这是"一个解决方案的黑客".
希望它可以帮助您了解您的委托是内存问题.删除(在这种情况下self)取消分配在testAlert被解雇之前以某种方式解除分配

  // retain self to avoid crash you were experiencing earlier
UIAlertView  *testAlert = [[ UIAlertView alloc]initWithTitle:messageTitle message:messageBody delegate:[self retain] cancelButtonTitle:messageClose otherButtonTitles:messageTryAgain, nil];
testAlert.tag = 2;
[testAlert show];
[testAlert release];


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
  // release self because you've gotten past the crash
  [self release];
}
Run Code Online (Sandbox Code Playgroud)

这绝不是一个优雅的解决方案,应该鼓励您进一步调试您的应用程序,以找出为什么self过早解除分配