2009-11-09 4 views
-1

Je suis en train de montrer une information de base de données dans un tableview et les informations détaillées dans une vue mon problème est le suivant:valeurs NSMutableArray devenant « invalide »

J'ai créé un NSMutableArray: NSMutableArray *myArray = [[NSMutableArray alloc]init]; Je peuplèrent former une base de données MyObj *obj = [[MyObj alloc]initWithName:idObj];

quand je montre les valeurs dans la méthode tableview cellForRowAtIndexPath: tout va bien, mais lorsque je tente de charger le même tableau dans la méthode didSelectRowAtIndexPath:, les valeurs dans les tableaux sont « invalides ».

La déclaration NSMutableArray est comme suit:

@property (nonatomic, retain) NSMutableArray *myArray; 

Voici le code:

.h

NSMutableArray *antrosArray; 

@property(nonatomic, retain) NSMutableArray *antrosArray; 

fichier .m

@synthesize antrosArray; 

//filling the array: 

Antro *antro = [[Antro alloc]initWithName:idAntro nombre:aName]; 
[self.antrosArray addObject:antro]; 

mon problème est :Lorsque j'accède au tableau à partir des méthodes tableView cellForRowAtIndexPath:, tout va bien, mais lorsque l'utilisateur sélectionne un enregistrement, j'ai essayé de lire le tableau dans la méthode didSelectRowAtIndexPath: et toutes les valeurs dans ma matrice ne sont pas valides.

Le tableau est là, ainsi que l'objet, mais les valeurs des objets sont vides, la méthode cellForRowAtIndexPath: nettoie le tableau.

+0

Il ne semble vraiment pas y avoir assez d'informations ici pour répondre à votre question avec quelque chose de concret. Postez votre code. –

+0

S'il vous plaît modifier votre question pour l'inclure. Le mettre dans un commentaire ne fonctionne pas parce qu'il finit par un gros bloc de texte illisible. –

+0

Aussi, s'il vous plaît modifier votre question pour inclure une description de ce que vous entendez par «invalide». –

Répondre

3

Il semble que vous définissiez une deuxième variable locale appelée myArray. Ce que vous devez En fait faire est la place

self.myArray = [[[NSMutableArray alloc] init] autorelease]; 

, vous devriez probablement utiliser -initWithCapacity: au lieu aussi bien, mais c'est une autre affaire.

Edit: Merci Chuck pour pointer mon autorelease manquant :)

+1

En fait, il devrait être soit [[[NSMutableArray alloc] init] autorelease] 'soit l'un des constructors de commodité, car le setter revendique déjà la propriété. Sans la publication, vous obtenez une fuite de mémoire. – Chuck

+0

Merci pour votre réponse, j'ai essayé votre solution, mais je reçois toujours des valeurs invalides dans mon tableau lorsque j'y accède à partir d'une autre méthode. J'en ai lu au sujet de la gestion de la mémoire, et cela suggère que mes tableaux sont automatiquement récupérés. J'ai utilisé "retenir" pour garder l'information mais cela ne fonctionne pas. –

+0

@Guillermo: S'il vous plaît modifier votre question pour inclure un exemple minimal, y compris les suggestions de Magnus, mais montrant toujours le bug. Sans rien de concret à regarder, nous poignardons aveuglément dans l'obscurité. – Chuck

0

utilisation retain lors de la définition ainsi.