Iphone 单击UIAlertView时崩溃

Iphone 单击UIAlertView时崩溃,iphone,ios,uialertview,Iphone,Ios,Uialertview,当我单击UIAletView时,我收到以下错误 alertView:clickedButtonAtIndex:]: message sent to deallocated instance 0x84c7010 这是我使用的代码 UIAlertView *testAlert = [[ UIAlertView alloc]initWithTitle:messageTitle message:messageBody delegate:self cancelButtonTitle:messa

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

alertView:clickedButtonAtIndex:]: message sent to deallocated instance 0x84c7010
这是我使用的代码

    UIAlertView  *testAlert = [[ UIAlertView alloc]initWithTitle:messageTitle message:messageBody delegate:self cancelButtonTitle:messageClose otherButtonTitles:messageTryAgain, nil];
    testAlert.tag = 2;
    [testAlert show];
    [testAlert release];
我有委托方法

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

}

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

只是想知道,你能给我们看看你的.h文件吗

如果我不得不冒险猜测,您已经忘记将类设置为作为委托响应UIAlertViews

您可能缺少以下内容:


@interface MyClass:UIViewController

如果ARC启用UIAlertView对象保留而无需释放,则会自动释放您的对象。

这是“一个解决方案的一次破解”。
希望它能帮助您理解您的代理是内存问题。被删除者(在本例中为
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];
}

这绝不是一个优雅的解决方案,应该鼓励您进一步调试应用程序,以找出
self
被过早释放的原因

代理似乎存在内存问题。在发出警报之前是否已释放?我已尝试自动释放。但这似乎不是问题所在。即便如此,
UIAlertView
似乎还是过早发布了。它与
UIAlertView
无关。响应者(self)是一个发布得太早的人。那么,这里应该做什么呢。我应该在什么时候将
UIAlertView
委托设置为从代码中删除发布并重新检查…:)好吧,我想这是值得一试的。这是我经常忘记的事情。即使你没有设定它会运行良好,但只会出现一个编译器警告我如何检查self是否被释放。NSLog是正确的方法吗?@XaviValero如果在显示alertview并在gdb中键入“po self”之前放置一个断点,会更清楚。继续单步执行并键入“po self”以查看self何时被解除分配。抛出NSLog(“myClass解除分配”)不是个坏主意;在您的dealloc方法中