2012-09-17 17 views
43

Sto cercando di capire perché sto ottenendo questo crash nella mia app.EXC_BAD_ACCESS codice 2 su UIAlertView in iOS6

Funziona perfettamente bene in Xcode 4.4 in esecuzione nel simulatore con iOS5.1, ma quando passo in Xcode 4.5 e iOS6 sto ottenendo un codice di EXC_BAD_ACCESS 2. Ecco il mio codice:

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

mi sta dando un codice EXC_BAD_ACCESS 2 sulla riga [UIAlertView show]

qualche idea?

grazie!

risposta

126

Ce l'ho. Ho lo stesso problema, nel mio caso sembra che il metodo sia lanciato dallo sfondo ora (ora in iOS7, in ios6 UIAlertView è stato automaticamente inserito nel thread principale come @nodepond dice -thanks! -) ..

cercare di assicurare che il metodo è illustrato dal thread principale:

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

Buona fortuna!

+4

belle capacità di debug! Funzionava sicuramente –

+3

Voglio solo aggiungere che questo arresto anomalo si verifica anche quando l'app viene avviata, se l'utente torna a casa e ritorna, una visualizzazione di visualizzazione di avviso si tradurrà in arresti anomali. Do performSelectorOnMainThread ... lo risolverà come suggerito da Eva. – Tommy

+0

Grande! Questo mi ha aiutato e risolto il mio problema! – Patrik

0

È successo con me, anche nel 2014. Il problema è voler utilizzare un oggetto già rilasciato.

Quello che ho fatto di sbagliato:

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

Qual è la strada giusta:

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

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