2010-07-02 8 views
3

OK, Il s'agit d'une méthode de mon programme qui continue à provoquer l'erreur EXC_BAD_ACCESS et se bloque. J'ai indiqué la ligne ci-dessous. questionsShown est une propriété readwrite et pointe vers un NSMutableArray initialisé avec une capacité de 99 à un point antérieur du programme. Quand je débogue, tout semble normal en termes de propriété allouée. J'ai supposé qu'il devait y avoir un problème avec la gestion de la mémoire, mais j'ai de sérieux problèmes pour trouver le problème. Merci d'avance pour votre aide.EXC_BAD_ACCESS Erreur pour aucune raison concevable

@synthesize questionList; 
@synthesize questionLabel; 
@synthesize questionsShown; 

-(IBAction)next{ 
int numElements = [questionList count]; 
int r; 
if (myCount == numElements){ 
    [questionLabel setText:@"You have seen all the questions, click next again to continue anyways."]; 
    [questionsShown release]; 
    questionsShown = [[NSMutableArray alloc] initWithCapacity:99]; 
    myCount = 0; 
} 
else { 
    do { 
     r = rand() % numElements; 
    } while ([questionsShown indexOfObjectIdenticalTo:r] != NSNotFound); 
    NSString *myString = [questionList objectAtIndex:(NSUInteger)r]; 
    [questionLabel setText:myString]; 
    myCount++; 
    [questionsShown addObject:r]; //results in crash with message EXC_BAD_ACCESS 
    myCount++; 
} 
} 

Répondre

10

Le EXC_BAD_ACCESS vient de déréférencement r, qui est juste un nombre entier. Votre compilateur devrait vous donner un avertissement (faire un pointeur d'entier sans un cast) sur cette ligne. Si questionsShown est supposé être un type d'index défini pour vous (ce qui semble être le cas), vous pouvez utiliser cette classe, ou vous devez placer votre entier dans un objet NSNumber. Alors:

[questionsShown addObject:[NSNumber numberWithInt:r]]; 

et quand vous le lisez:

[questionsShown indexOfObjectIdenticalTo:[NSNumber numberWithInt:r]] 

Je recommande, cependant, que vous jetez un oeil à la NSIndexSet documentation.

Avec un ensemble d'index mutable, vous pouvez faire:

[questionsShownIndexSet containsIndex:r] 

et

[questionsShownIndexSet addIndex:r] 
+0

qui a résolu le problème, et les mauvais regard sur NSIndexSet. merci beaucoup, j'ai encore beaucoup de l'objectif c à explorer. – wbarksdale

Questions connexes