problème Filtre sur Array :'( [Résolu]
wisky
Membre
Bonjour à tous,
Je n'est pas touché terre depuis un moment ce qui me rendait impossible de continuer le développement de mes applications.
Je m'y remet car j'ai un peut de temps :P Si je poste c'est que j'ai un problème :-\\
Le voila:
Ce code me pose problème. C'est un filtre qui récupère dans Array1 les elements qui sont indiqué dans contents.
Le filtre marche mais quand je modifie un élément dans Array3 (le résultat du filtre) la modification n'est pas récupéré dans Array1.
Renaud tu me porposait ça mais ça marche pas car dans l'array retourner par [tt][dico objectForKey:@content][/tt] il n'y a pas d'élément [tt]IndexUniq[/tt]
Mon problème reste le même les modif faite dans le résultat d'un filtre ne l'applique pas a l'array1.
Commen faire???
Je n'est pas touché terre depuis un moment ce qui me rendait impossible de continuer le développement de mes applications.
Je m'y remet car j'ai un peut de temps :P Si je poste c'est que j'ai un problème :-\\
Le voila:
NSMutableArray *contents = [[NSMutableArray alloc] initWithArray:[dico objectForKey:@"contents"]];<br /> NSEnumerator *enumerator, *e;<br /> NSString *fnString;<br /> id object,o;<br /> <br /> e = [Array1 objectEnumerator];<br /> <br /> if(subset!=nil) [subset release];<br /> subset = [[NSMutableArray alloc] init];<br /> <br /> while ( o = [e nextObject] ) {<br /> fnString = [o objectForKey:@"IndexUniq"];<br /> enumerator = [contents objectEnumerator];<br /> while(object = [enumerator nextObject])<br /> if ( [fnString isEqualToString:object])<br /> [subset addObject:o];<br /> }<br /> Array2 = subset;<br /> //[saveActiveSet release];<br /> Array3 = Array2;<br /> [TableView reloadData];
Ce code me pose problème. C'est un filtre qui récupère dans Array1 les elements qui sont indiqué dans contents.
Le filtre marche mais quand je modifie un élément dans Array3 (le résultat du filtre) la modification n'est pas récupéré dans Array1.
Renaud tu me porposait ça mais ça marche pas car dans l'array retourner par [tt][dico objectForKey:@content][/tt] il n'y a pas d'élément [tt]IndexUniq[/tt]
NSArray* indexUniqs = [Array1 valueForKey:@"IndexUniq"]; //renvoie un tableau qui contient toutes les valeurs pour la clé @"IndexUniq" des objets contenus dans Array1<br />NSMutableSet* set = [NSMutableSet setWithArray:indexUniqs];// on mets tout dans un set<br />NSSet* contents = [NSSet setWithArray:[dico objectForKey:@"content"]]; // on crée un set qui contient les éléments de contents.<br /><br />[set intersectsSet:contents]; //on demande à set de ne garder que les éléments communs entre son contenu et celui de contents. le tri est fait.<br /><br />//Et maintenant, il faut une petite boucle pour récupérer les objets de Array1 eux même, plutôt que leur indexUniq.<br />NSMutableArray* items = [NSMutableArray array];<br />NSEnumerator* e = [set objectEnumerator];<br />id obj;<br />while (obj = [e nextObject]) [items addObject:[Array1 objectAtIndex:[indexUniqs indexObject:obj]];
Mon problème reste le même les modif faite dans le résultat d'un filtre ne l'applique pas a l'array1.
Commen faire???
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Comment est initialisé Array1 ?
Parce que ce n'est pas parce que c'est un MutableArray que tu peux changer la valeur des éléments dedans, ça veut juste dire qu'au moins tu peux les remplacer.
Je m'explique : un NSMutableArray peut être modifié, par exemple en ajoutant des éléments, en en supprimant, ou en remplaçant un élément par un autre. Mais ce n'est pas en remplaçant un élément par un autre dans ton NSMutableArray "Array3" que tu vas le remplacer dasns Array1.
Il faut que tes éléments dans Array3 soient eux-même mutable : par exemple si ton Array3 contient en position 4 un NSMutableDictionary, alors il faut que tu récupères ce NSMutableDictionary (avec objectAtIndex) et que tu le modifies, par exemple avec objectForKey.
Le pointeur qui est en 4e position dans Array3, qui est le même que celui qui est autre part dans Array1, ne sera pas modifié, il pointera vers le même NSMutableArray. C'est l'objet NSMutableArray qui sera modifié. Et donc là "la modif opèrera bien dans les 2 Array" si tu veux. Alors que si tu fais un replaceObjectAtIndex:4 withObject:machin, là , tu peux toujours courir.
Enfin moi j'dis ça... j'dis rien ;D
En effet je procède par [tt]replaceObjectAtIndex[/tt]. Je vais revoir mon code
Je charge mes [tt]NSMutableArray[/tt] avec des [tt]NSMutableDictionary[/tt]
Je modifi comme ça :
Les modif faite sur un élément après filtrage n'est pas répercuté sur la source.
Que faire??