2010-06-02 4 views
0

mon problème est que je ne peux pas accéder à mon NSMutableArray dans - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {}.Problème d'accès avec NSMutableArray

Je crée mon NSMutableArray ici:

nodes = [xmlDoc nodesForXPath:@"/xml/items/item/short_desc" error:nil]; 

if (nodes != nil && [nodes count] >= 1) { 
    for (int i = 0; i < [nodes count]; i++) { 
     CXMLElement *resultElement = [nodes objectAtIndex:i]; 
     result = [[[[resultElement attributeForName:@"data"] stringValue] copy] autorelease];  
     [short_desc addObject:result]; 
    } 
} 

et je peux imprimer le contenu de short_desc partout avec:

NSLog([short_desc objectAtIndex:0]); 

mais pas (si je le fais, plantage de mon application):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

..... 

NSString *date = [name objectAtIndex:0]; 


labelDate.text = date; 
..... 

return cell;} 

si j'utilise:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

..... 

NSString *date = @"text..."; 


labelDate.text = date; 
..... 

return cell;} 

cela fonctionne correctement.

TOUTE SOLUTION POUR CE PROBLÈME ???

+0

Non lié à votre question mais ne faites pas ceci: 'NSLog ([short_desc objectAtIndex: 0]);', faites ceci: 'NSLog (@"% @ ", [short_desc objectAtIndex: 0]);' le raison étant que si la chaîne dans le premier cas contient des% échappements, vous allez planter. – JeremyP

+0

En outre, vous devez obtenir des avertissements du compilateur sur ce NSLog, si vous êtes, ** ne les ignorez pas **. Si ce n'est pas le cas, activez le drapeau '-Wall' et définissez également l'option" run static analyser "dans vos paramètres de construction. la chance est que cela marquera votre problème. – JeremyP

+0

Ne fonctionne pas avec NSLog (@ "% @", [short_desc objectAtIndex: 0]); aussi; Si j'ajoute cette ligne, mon application se bloque –

Répondre

3

Vous ne montrez pas comment vous créez le tableau, mais la cause la plus probable est que vous ne retenez pas votre tableau et qu'il n'est pas libéré avant que vous ne rencontriez la méthode qui plante. Comment créez-vous le tableau de noms? .. Droit de sorte que vous voyez que vous créez le tableau comme si 62. name = [NSMutableArray arrayWithCapacity: 10]; vous devez conserver le tableau sinon le système d'exploitation libérer la mémoire et vous wont bea ble pour y accéder ... au lieu que vous pouvez faire

name =[ [NSMutableArray arrayWithCapacity:10] retain]; 

L'affiche ci-dessous m'a affiché un article sur la mémoire que vous managment devriez aller au-dessus que ... voici un lien de toute façon memory managment guide

+0

NSMutableArray * short_desc; short_desc = [NSMutableArray arrayWithCapacity: 10]; –

+0

Voici tout mon code: http://pastebin.com/iFKb6BWQ –

+0

à droite, consultez mon édition – Daniel

0

Si vous créez un tableau en utilisant des méthodes avec le mot "alloc", "nouveau" ou "copier" dans le nom de la méthode, vous n'avez pas besoin de conserver le tableau. Dans d'autres cas, le tableau créé est un tableau authoreleased. Si vous souhaitez le stocker, vous devez augmenter le compteur de conservation en envoyant la méthode retain (par exemple, [names retain]). Et n'oubliez pas de le relâcher lorsque vous avez fini de l'utiliser (par exemple, dans la méthode dealloc).

Veuillez lire Memory Management Guide.

+0

short_desc = [NSMutableArray arrayWithCapacity: 10]; renvoie le tableau autoreleased. Utilisation: short_desc = [NSMutableArray arrayWithCapacity: 10]; [short_desc retain]; – OgreSwamp

+1

pour votre code (à partir du lien) vous devez créer des tableaux comme celui-ci: short_desc = [[NSMutableArray alloc] initWithCapacity: 10]; nom = [[NSMutableArray alloc] initWithCapacity: 10]; location = [[NSMutableArray alloc] initWithCapacité: 10]; startDate = [[NSMutableArray alloc] initWithCapacité: 10]; et dans la méthode dealloc que vous devriez faire: [short_desc release]; [libération du nom]; etc ... – OgreSwamp

+0

short_desc = [[NSMutableArray alloc] initWithCapacité: 10]; a bien fonctionné! Merci! –

Questions connexes