problème Filtre sur Array :'( [Résolu]

wiskywisky Membre
janvier 2006 modifié dans API AppKit #1
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:
NSMutableArray *contents = [[NSMutableArray alloc] initWithArray:[dico objectForKey:@&quot;contents&quot;]];<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:@&quot;IndexUniq&quot;];<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:@&quot;IndexUniq&quot;]; //renvoie un tableau qui contient toutes les valeurs pour la clé @&quot;IndexUniq&quot; des objets contenus dans Array1<br />NSMutableSet* set = [NSMutableSet setWithArray:indexUniqs];// on mets tout dans un set<br />NSSet* contents = [NSSet setWithArray:[dico objectForKey:@&quot;content&quot;]]; // 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??? :'( :'( :'( :'(

Réponses

  • wiskywisky Membre
    10:31 modifié #2
    Je rectifie sur la deuxième façon de faire le filtre. C'est [tt][set intersectsSet:contents];[/tt] qui ne fonctionne pas correctement  :-\\
  • Eddy58Eddy58 Membre
    janvier 2006 modifié #3
    dans 1137273157:

    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.

    Comment est initialisé Array1 ? :o
  • AliGatorAliGator Membre, Modérateur
    janvier 2006 modifié #4
    Oui et comment tu modifies tes éléments dans Array3 ?
    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
  • wiskywisky Membre
    10:31 modifié #5
    Merci aliGator.
    En effet je procède par [tt]replaceObjectAtIndex[/tt]. Je vais revoir mon code ;)
  • wiskywisky Membre
    10:31 modifié #6
    ça ne marche toujour pas.
    Je charge mes [tt]NSMutableArray[/tt] avec des [tt]NSMutableDictionary[/tt]
    Je modifi comme ça :
    NSMutableDictionary *dico = [Array3 objectAtIndex:[List selectedRow]];<br />[dico setObject:[Edit_Name stringValue] forKey:@&quot;Nom&quot;];
    


    Les modif faite sur un élément après filtrage n'est pas répercuté sur la source.
    Que faire??
  • wiskywisky Membre
    10:31 modifié #7
    Autan pour moi, ça marche. <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <br /> :p :p :p :p :p :p :p :p :p :adios!: :adios!: :adios!: :adios!: :adios!: :adios!: :adios!: :adios!:
Connectez-vous ou Inscrivez-vous pour répondre.