在UIAlertView在iOS6 EXC_BAD_ACCESS代码2

在UIAlertView在iOS6 EXC_BAD_ACCESS代码2

问题描述:

我想弄清楚为什么即时通讯崩溃在我的应用程序。在UIAlertView在iOS6 EXC_BAD_ACCESS代码2

它工作在Xcode 4.4完美的罚款与ios5.1的模拟器中运行,但是当我切换到的Xcode 4.5和iOS6的我得到一个EXC_BAD_ACCESS码2。这里是我的代码:

- (void) myMethod 
{ 
    UIAlertView *alertview = [[[UIAlertView alloc]initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
    alertview.tag = 1 
    [alertview show]; 
} 

这是给我一个EXC_BAD_ACCESS代码2上的[UIAlertView show]

有什么想法吗?

谢谢!

我明白了。 我有同样的问题,在我的情况下,似乎该方法是从后台抛出(现在在ios7中,在ios6中,UIAlertView被自动置于主线程中,因为@nodepond说 - 谢谢! - )..

尽量保证从主线显示的方法:

[alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 

祝你好运!

+4

好的调试技能!肯定工作 –

+3

我只想补充说,这个崩溃也发生在应用程序启动时,如果用户回家并返回,警报视图显示将导致崩溃。执行SelectorOnMainThread ...将按照Eva的建议修复它。 – Tommy

+0

太棒了!这帮助我解决了我的问题! – Patrik

它发生在我身上,即使在2014年。 问题是想使用已经发布的对象。

我做了什么错:

//class B with UIAletViewDelegate 

-(void) showAlert{ 
UIAlertView * alert = [[UIAlertView alloc] initWithTitle bla bla...]; 
[alert show]; 
} 


//class A 
viewDidLoad{ 
MyClassB *B = [[B alloc] init]; 
[B showAlert]; 
} 

什么是正确的做法:

//Class A 
@implementation A{ 
    ClassB *B; 
} 

viewDidLoad{ 
    B = [[B alloc] init]; 
    [B showAlert]; 
}