2010-03-08 3 views
0

J'ai un problème avec un mauvais accès exc. J'ai déjà activé NSZombieEnabled, mais je n'arrive pas à comprendre pourquoi ce problème sera causé. Comment le cartInstance Array est défini, vous pouvez voir ci-dessous dans la fonction suivante. C'est un NSMutableArray avec plusieurs NSMutableDictionaries L'erreur se produit chaque fois que mon compteur i atteint 13. Ensuite, je reçois un mauvais accès et le message comme indiqué dans le titre. Voici un code:"- [CFNumber intValue]: message envoyé à l'instance désaffectée" et aucune idée

-(void)addToCart:(NSDictionary *) article{ 
if(article!=nil){ 

    NSString * amount = @"amount"; 
    NSString * articleId = @"articleId"; 
    NSString * detailKey = @"detailKey"; 



    NSString *curId = [article objectForKey:@"articleId"]; 

    //check if article already in shopping cart 
    if([cartInstance count]>0) 
    { 
     for(int i=0;i<[cartInstance count];i++) { 
      NSString *tempStr = [[cartInstance objectAtIndex:i] objectForKey:articleId]; 
      if([tempStr isEqual:curId]) { 

       NSNumber *newAmount = [[cartInstance objectAtIndex:i] objectForKey:amount]; 
       NSLog(@"AddtoCart"); 
       int tempInt = [newAmount intValue]+1;//Here is where the magic happens 
       newAmount = [NSNumber numberWithInt:tempInt]; 
       [[cartInstance objectAtIndex:i] setObject:newAmount forKey:amount]; 
       [newAmount release]; 
       return; 
      } 
     } 
    } 


    NSDictionary *details = article; 
    NSDictionary *shoppingItem = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:1],amount, 
            curId,articleId, 
            details,detailKey, 
            nil]; 
    [shoppingItem retain]; 

    [cartInstance addObject:shoppingItem]; 
    id obj; 
    NSEnumerator * enumerator = [cartInstance objectEnumerator]; 
    while ((obj = [enumerator nextObject])) NSLog(@"%@", obj); 

} 
else{ 
    NSLog(@"Error: Could not add article to shoppingcart."); 
} 

}

Quelqu'un peut-il me aider? Merci d'avance.

Répondre

3

Un problème que vous avez est ici:

  newAmount = [NSNumber numberWithInt:tempInt]; 
      [[cartInstance objectAtIndex:i] setObject:newAmount forKey:amount]; 
      [newAmount release]; 

Ce Affecte un autoreleased NSNumber, mais vous libérer manuellement plus tard. Ne fais pas ça. Essayez d'utiliser "Build & Analyze" sur votre application; cela vous indiquera des problèmes de gestion de la mémoire comme celui-ci.

+0

Doh! Merci beaucoup. Je suis assez nouveau pour l'objectif-c .. :-) Merci –

1

En bref, ne libérez rien de ce que vous n'avez pas alloué. Puisque vous n'avez pas appelé "alloc" pour newAmount. Vous ne devriez pas appeler la libération aussi bien.

Questions connexes