43 votes

EXC_BAD_ACCESS code 2 sur UIAlertView sous iOS6

J'essaie de comprendre pourquoi je reçois ce crash dans mon application.

Cela fonctionne parfaitement dans Xcode 4.4 fonctionnant dans le simulateur avec ios5.1, mais lorsque je passe en xcode 4.5 et ios6, je reçois un code EXC_BAD_ACCESS 2. Voici mon code:

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

cela me donne un code EXC_BAD_ACCESS 2 sur la ligne [UIAlertView show]

des idées?

Merci!

127voto

Eva Madrazo Points 3220

J'ai compris. J'ai le même problème, dans mon cas, il semble que la méthode soit maintenant renvoyée de l'arrière-plan (maintenant sous ios7, sous ios6, UIAlertView a été automatiquement placé dans le thread principal comme @nodepond dit -merci! -) ..

essayez de vous assurer que la méthode est montrée à partir du thread principal:

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

Bonne chance!

0voto

orafaelreis Points 835

C'est arrivé avec moi, même en 2014. Le problème est de vouloir utiliser un objet déjà publié.

Ce que j'ai mal fait:

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

Quelle est la bonne façon:

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X