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方法中