2010-09-20 8 views
0

J'ai ce code, qu'est-ce que je fais mal?Recharger la table/tableau avec la fonction?

J'ai une fonction que j'appelle jouer un certain nombre de chaînes dans un tableau. Ensuite, à un moment donné, je veux le recharger après que l'utilisateur a modifié les chaînes. Ceci est la fonction:

NSMutableArray *lessonsFunc(id a, id b, id c, id d, id e, id f){ 
    monData *mon = [monData sharedData]; 
    return [NSMutableArray arrayWithObjects:@"Before School", 
              [NSString stringWithFormat:@"%@", a], 
              [NSString stringWithFormat:@"%@", b], 
              @"Break", 
              [NSString stringWithFormat:@"%@", c], 
              [NSString stringWithFormat:@"%@", d], 
              @"Lunch", 
              [NSString stringWithFormat:@"%@", e], 
              [NSString stringWithFormat:@"%@", f], 
              @"After School", nil]; 
} 

Je l'appelle comme ceci:

monArrayA = lessonsFunc(mon.P11S, mon.P21S, mon.P31S, mon.P41S, mon.P51S, mon.P61S); 

Je veux recharger/rafraîchir quand je presse le bouton:

-(IBAction)refreshLessons{ 
    monData *mon = [monData sharedData]; 
    //[monArrayA removeAllObjects]; 
    //[monArrayA release]; 
    //monArrayA = [[NSMutableArray alloc] init]; 
    monArrayA = lessonsFunc(mon.P11S, mon.P21S, mon.P31S, mon.P41S, mon.P51S, mon.P61S); 
    //[monTable reloadData]; 
} 

Il se bloque presque toujours quand j'appuie sur ce bouton. Toute aide très appréciée, merci!

Répondre

1

Le problème probable est que lessonsFunc renvoie une matrice libérée automatiquement qui peut devenir invalide en dehors de la portée actuelle (ici - en dehors de la fonction refreshLessons). Essayez de le conserver pour le garder valide aussi longtemps que vous en avez besoin. Pour ce faire, je vous suggère de déclarer une propriété pour votre tableau - compilateur génère automatiquement des méthodes setter et getter pour vous qui va gérer la plupart de gestion de la mémoire pour vous:

// header 

@property (nonatomic, retain) NSMutableArray * monArrayA; 

//Implementation 
@synthesize monArrayA; 
... 
-(IBAction)refreshLessons{ 
    monData *mon = [monData sharedData]; 

    self.monArrayA = lessonsFunc(mon.P11S, mon.P21S, mon.P31S, mon.P41S, mon.P51S, mon.P61S); 
} 
... 
- (void)dealloc{ 
    // Don't forget to release monArrayA in dealloc method 
    [monArrayA release]; 
    ... 
    [super dealloc]; 
} 
+0

Ahh je pensais que ce serait peut-être quelque chose à faire avec cela, mais n'a pas tout à fait verrouillé (typique moi!) merci !!!!! –

+0

Bien qu'une petite question, y at-il une raison pour laquelle je dois dire self.monArrayA plutôt que monArrayA? –

+1

self.monArrayA équivaut à appeler la méthode [self setMonArrayA] (générée automatiquement si vous avez utilisé @synthesize) et monArrayA est conservé à l'intérieur. Vous pouvez écrire monArrayA = [lessonFunc() retain], mais vous devez libérer manuellement la valeur monArrayA précédente. L'utilisation de propriétés rend la vie beaucoup plus facile – Vladimir

Questions connexes