Afficher des éléments ordonnées dans un PickerVIew

hedihedi Membre
02:17 modifié dans Vos applications #1
Bonjour à  tous
J'ai besoin de vos éclaircissements s'il vous plaà®t
En fait j'e rempli un picker view avec des éléments que je récupère dans un fichier XML
Ce fichier contient

<nom>nom1</nom>
<prenom>prenom1</prenom>
<numeroPoste>1</numeroPoste>
<profession>profession1</profession>
<nom>nom2</nom>
<prenom>prenom2</prenom>
<numeroPoste>2</numeroPoste>
<profession>profession2</profession>
<nom>nom3</nom>
<prenom>prenom3</prenom>
<numeroPoste>1</numeroPoste>
<profession>profession1</profession>

et donc la je veux remplir mon picker avec ces éléments mais ordonnées avec le numero de poste

en quelques sortes dans mon picker je veux avoir la liste 1,2

Est ce que quelqu'un sait par quel procédé on pass
Merci

                           

Réponses

  • Eddy58Eddy58 Membre
    02:17 modifié #2
    Je te conseil de suivre ce tutoriel pour les pickerviews : http://www.iphonesdkarticles.com/2009/01/uipickerview-creating-simple-picker.html
  • AliGatorAliGator Membre, Modérateur
    02:17 modifié #3
    Parser le XML. Construire le Model correspondant. Trier le Model avec un NSSortDescriptor. utiliser le Model trié comme DataSource du Picker. Bref principes de base de MVC, tu peuples le modèle, l'organise, puis t'en sers.
  • hedihedi Membre
    02:17 modifié #4
    Merci Beaucoup pour votre réponse c'est sympa
    Mais je voudrai dire a Eddy que j'ai bien suivi ce tutoriel mais si on garde ce tutoril je voudrai que dans mon pickerView on affiche
      Blue                          au lieu de                                                  Red                 
      Green                        comme vue                                                Orange                       
      Indigo                        dans l'exemple                                            Yellow
      Orange                                                                                        Green
      Red                                                                                              Blue
      Violet                                                                                          Indigo
      Yellow                                                                                          Violet

    Est ce que tu as une idée comment on fait Maintenant

    Merci beaucoup AliGator pour tes éclaircissements mais en fait je ne sais pas exactement comment utiliser cette fonctionnalité de NSArray
    Est ce que au lieu de déclarer un NSArray comme ca on peut directement le déclarer pour qu'il soit ordonné.

    Merci et je te demanderai d'être plus indulgent, compréhensifs et surtout pédagogue avec les nuls comme moi pasque peut etre qu'un jour je te serait très util.
    ;)
  • Eddy58Eddy58 Membre
    02:17 modifié #5
    Il faut utiliser NSSortDescriptor pour le tri. Cette doc explique très bien comment l'utiliser sur NSArray : http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/SortDescriptors/Concepts/Creating.html
  • hedihedi Membre
    02:17 modifié #6
    Oui c'est exact eddy58 mais en fait je ne sais pas exactement ou le mettre dans mon code
    attends voici le code


    - (void)acoRace:(ACORace *)raceObject didLoadFacts:(NSArray *)factsList<br />{<br />	[hud_ hide:YES];<br />	<br />	PXReleaseSafely(facts);<br />	facts = [factsList retain];<br />	<br />	PXReleaseSafely(displayedFacts);<br />	displayedFacts = [facts retain];<br />	//[self updateAndReload];<br />	//[refreshHeaderView setCurrentDate];<br />	//[super dataSourceDidFinishLoadingNewData];<br />	<br />	DLog(@&quot;Facts : %@&quot;, facts);<br />	<br />	for (ACOFact *fact in facts)<br />	{<br />		if (fact.numberTeam != nil)<br />		{<br />			NSMutableArray *factPerTeam = (NSMutableArray *)[factsPerTeam objectForKey:fact.numberTeam];<br />			<br />			NSMutableArray *arrayOfDictOfPerson; //&nbsp;  = [[NSMutableArray alloc] initWithCapacity:0];<br />			<br />			// Création du chemin vers le Personne.plist<br />			//NSString *path = [[NSBundle mainBundle] pathForResource:@&quot;Personne&quot; ofType:@&quot;plist&quot;];<br />			// Création d&#039;un NSMutableArray temporaire avec le chemin en paramètre<br />			//NSMutableArray *arrayTemp = [[NSMutableArray alloc] initWithContentsOfFile:path];<br />			// Création d&#039;un NSSortDescriptor&nbsp;  , ici je choisi de trier par &quot;Prenom&quot;, vous pouvez mettre n&#039;importe quelle clé<br />			//NSSortDescriptor* nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@&quot;numero_equipe&quot; ascending:YES];<br />			// J&#039;utilise le SortDescriptor pour remplir mon Array<br />			//NSMutableArray* sortedArray = [factPerTeam sortedArrayUsingDescriptors:[NSMutableArray arrayWithObject:nameSortDescriptor]];<br />			// On relâche le NSSortDescriptor<br />			//[nameSortDescriptor release];<br />			// Je rempli mon Array d&#039;origine avec l&#039;Array temporaire<br />			//arrayOfDictOfPerson = sortedArray;<br />			// On relâche l&#039;Array temporaire<br />			//[arrayTemp release];<br />			<br />			arrayOfDictOfPerson = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];<br />			NSSortDescriptor* nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@&quot;numero_equipe&quot; ascending:YES];<br />			// J&#039;utilise le SortDescriptor pour remplir mon Array<br />			NSMutableArray* sortedArray = [factPerTeam sortedArrayUsingDescriptors:[NSMutableArray arrayWithObject:nameSortDescriptor]];<br />			// On relâche le NSSortDescriptor<br />			[nameSortDescriptor release];<br />			// Je rempli mon Array d&#039;origine avec l&#039;Array temporaire<br />			arrayOfDictOfPerson = sortedArray;<br />			<br />			//NSSortDescriptor* factPerTeamNumber = [[[NSSortDescriptor alloc] initWithKey:@&quot;numberTeam&quot; ascending:YES] autorelease];<br />			<br />			//	NSArray *listX =[displayedFacts sortedArrayUsingDescriptors:[NSArray arrayWithObject:factPerTeamNumber]];<br />			<br />			<br />			if (arrayOfDictOfPerson == nil)<br />			{<br />				[factsPerTeam setObject:arrayOfDictOfPerson forKey:fact.numberTeam];<br />				[teamsName setObject:fact.nameTeam forKey:fact.numberTeam];<br />			}<br />			<br />			[factPerTeam addObject:fact];<br />			<br />			/*if (factPerTeam == nil)<br />			{<br />				factPerTeam = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];<br />				[factsPerTeam setObject:factPerTeam forKey:fact.numberTeam];<br />				[teamsName setObject:fact.nameTeam forKey:fact.numberTeam];<br />			}*/<br />			 [arrayOfDictOfPerson release];<br />			<br />			//[factPerTeam addObject:fact];<br />		}	<br />	}<br />	<br />	[self updateAndReload];<br />	[refreshHeaderView setCurrentDate];<br />	//[refreshHeaderView refreshLastUpdatedDate];<br />	[super dataSourceDidFinishLoadingNewData];<br />	<br />	DLog(@&quot;Faits par equipe : %@&quot;, factsPerTeam);<br />	<br />	if (pickerController == nil)<br />	{<br />		pickerController = [[ACOPickerViewController alloc] init];<br />		pickerController.delegate = self;<br />		<br />		[pickerController clearAllItems];<br />		<br />		[pickerController addItemWithText:NSLocalizedString(@&quot;factsAllPickerMessage&quot;, @&quot;choix tous les faits&quot;) andValue:kPickerAllKey];<br />		<br />		for (NSString *NumberTeam in [factsPerTeam allKeys])<br />		{<br />			[pickerController addItemWithText:[NSString stringWithFormat:@&quot;#%@ %@&quot;, NumberTeam, [teamsName objectForKey:NumberTeam]] andValue:NumberTeam];<br />		}<br />	}<br />}<br />
    



    En fait je rempli mon pickerView avec des fait des numero d'equipes et des noms d'equipes pour pouvoir filtrer leurs faits (de courses) par equipe
    sauf que le problème je veux que dans le picker j'ai leurs numeros ordonnées
    J'ai laissé tout ce que j'ai essayé mais en vain
    est ce que tu peux me dire ou est ce que j'ai merdé stp.
    Meerci
  • Eddy58Eddy58 Membre
    02:17 modifié #7
    D'après ton code (soit dit en passant très brouillon tu dois avoir des memory leaks je pense), tu es sur la bonne piste.

    Que donnent des logs de ton array avant et après tri ?

    Par contre tu utilises le pickerview d'une façon bizarre, il faut utiliser les méthodes datasources. (voir doc)
  • hedihedi Membre
    02:17 modifié #8
    t'inquiète eddy pour mon pickerView j'ai developpé une classe PickerView dans laquelle je défini un picker view et ses composantes.Come ca je peux l'utiliser dans n'importe kel projet
    En fait je ne suis pas sur mon mac ce soir donc je te réponderai par rapport a mes logs lundi.
    Bonne nuits
Connectez-vous ou Inscrivez-vous pour répondre.