2012-09-17 31 views
43

Estoy tratando de averiguar por qué estoy recibiendo este bloqueo en mi aplicación.EXC_BAD_ACCESS código 2 en UIAlertView en iOS6

Funciona perfectamente bien en Xcode 4.4 que se ejecuta en el simulador con iOS5.1, pero cuando pongo en Xcode 4.5 y iOS6 estoy recibiendo un código de EXC_BAD_ACCESS 2. Aquí está mi código:

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

esto me está dando un código EXC_BAD_ACCESS 2 en la línea [UIAlertView show]

¿Alguna idea?

gracias!

Respuesta

126

Lo tengo. Tengo el mismo problema, en mi caso parece que el método se lanzó desde el fondo ahora (ahora en ios7, en ios6 UIAlertView se puso automáticamente en el hilo principal como @nodepond dice -gracias! -) ..

tratar de asegurar que el método se muestra de hilo principal:

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

Buena suerte!

+4

agradables habilidades de depuración! Definitivamente funcionó –

+3

Solo quiero agregar que este bloqueo también ocurre cuando se inicia la aplicación, si el usuario va a su casa y regresa, un espectáculo de vista de alerta provocará un bloqueo. Hacer performSelectorOnMainThread ... lo arreglará como lo sugiera Eva. – Tommy

+0

¡Genial! ¡Esto me ayudó y resolvió mi problema! – Patrik

0

Ha sucedido conmigo, incluso en 2014. El problema es querer utilizar un objeto ya lanzado.

lo que hice mal:

//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]; 
} 

¿Cuál es la manera correcta:

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

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