当我点击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
时,即使在控件到达委托方法之前,应用程序也会崩溃。可能是什么原因。我做错了什么?
答案 0 :(得分:8)
这是“一个解决方案的黑客”。
希望它可以帮助您了解您的委托是内存问题。在self
被解雇之前,delegete(在这种情况下为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
过早被解除分配
答案 1 :(得分:2)
只是想知道,你能告诉我们你的.h文件吗?
如果我不得不冒险猜测,你就忘记设置你的班级作为代表回应UIAlertViews
你可能会遗漏这样的事情:
@interface MyClass : UIViewController <UIAlertViewDelegate>
答案 2 :(得分:1)
如果ARC启用UIAlertView对象而不需要释放,它会自动释放您的对象。