eh bien ce qui me bloque c'est que je n'ai que trois mois de objectiveC dans la tête et que je n'ai pas du tout la façon de penser de la programmation Objet. ça vient doucement. je me paluche des PDF qui expliquent la programmation iPhone, je regarde et fait des tuto avec youtube en essayant de coller des bouts de codes dans mon programme. je sais c'est pas des legos mais c'est la seule manière que j'ai d'avancer.
Ton aide m'est très précieuse.
tu me donnes des pistes très intéressantes que j'ai du mal à mettre en place.
Pour toi c'est simple tu es mouleur de chocolat, moi éleveur de cacaoyers.
Par exemple quand tu dis boucler ? tu veux dire faire une boucle if... else... ?
c'est à dire que mon tableau va s'écrire lignes par lignes ? et avant d'inscrire la ligne je lui dit de découper Africa/Abidjan... ?
Sachant que la première des 2 solutions proposée par Larme, en plus d'être plus lisible, est aussi plus efficace/performante (bon ça se joue à peu, mais bon).
j'ai réussi à séparer les continents des villes et à les avoir dans une variable, le problème avec mon code est qu'il fonctionne quand il y a un "/" dans le array, mais cela se complique quand il n'y en a pas dans [NSTimeZone knownTimeZoneNames] comme par exemple avec @GMT cela bloque ma requête.
De plus, il y a des noms avec plusieurs "/" et là ça bug aussi.
mon souci :
- comment passer @GMT dans ma boucle sans que ça plante ?
- comment gérer les Continents/Pays/villes avec deux "/" ?
On préfèrera faire un isEqualToString avec 2 NSString
Il faut que tu vérifies combien il y a d'éléments dans le NSArray que tu as créé avec componentsSeparatedByString. Car objectAtIndex:1 risque de planter.
J'ai mis dans mon exemple : lastObject, car parfois, c'est Continent/Pays/Ville, et non pas que Continent/Ville
super l'idée de "lastObject"! ça me permet de passer mon problème de @GMT qui dans la liste était tout seul !
Par contre, ça fait bizarre parcequ'il me met ex: "America / Port au Prince", je sais que c'est en termes de fuseaux horaires mais ça fait bizarre ! je ne sais pas si la personne qui part en Martinique va penser à sélectionner America dans le pickerView de gauche pour faire apparaitre Port au Prince dans le pickerView de droite !
peut-être vaut il mieux que je reste sur l'idée d'une table indexée par villes ? plutôt que deux PickerView avec Continents et Villes.
super l'idée de "lastObject"! ça me permet de passer mon problème de @GMT qui dans la liste était tout seul !
Oui et non. En fait, ce qui évite de rentrer dans le GMT tout seul, c'est que je regarde combien d'objets au NSArray. Si j'avais pas fait ce test (count == 2), tu aurais eu dans les logs Continent:GMT; City:GMT. Le lastObject me permet surtout d'éviter ça :
Quant au soucis de la Martinique, si dans ton UIPicker, tu dis clairement qu'on choisit son continent, il ne devrait pas avoir de soucis. Je pense que les Martiniquais sont au courant qu'ils ne sont en pas en Europe géographiquement.
J'avoue ne pas être sûr de bien expliquer cela, mais :
Tu utilises des variables locales, qui ne sont présentes que dans le bout de code que tu utilises.
Exemple :
-(void)doSomething
{
int variableA = 3;
NSLog(@a: %d, a);
}
variableA n'existe que dans ce bout de code.
Maintenant, on rajoute des {}.
Du coup :
-(void)doSomething
{
int variableB = 4
{
int variableA = 3;
NSLog(@a: %d, a);
NSLog(@b: %d, b);
}
//Ici, je ne connais pas de variableA (elle a cessé d'existé à la sortie des bracklets, mais je connais une variableB par contre.
}
En général, on ne mets pas des {} gratuitement comme ça (c'est mis via un for, if, etc.)
Donc je dois remplir mon tableau à l'intérieur des bracklets de la boucle tant que mes variables sont connues.
Est ce qu'un dictionnaire se rempli au fur et à mesure ? car les exemples que je vois sont des objets qui sont rentrés manuellement et non pas par incrémentation.
ça passe les value une par une encore, est ce qu'il faut que j'utilise la fonction copyitems ? ou est ce qu'il faut que je remplisse un dictionnaire à l'intérieur et que cela nourrisse celui à l'extérieur des bracklets ?
The value for aKey. A strong reference to the object is maintained by the dictionary. Raises anNSInvalidArgumentException if anObject is nil. If you need to represent a nil value in the dictionary, use NSNull.
aKey
The key for value. The key is copied (using copyWithZone:; keys must conform to the NSCopying protocol). Raises an NSInvalidArgumentException if aKey is nil. If aKey already exists in the dictionary anObject takes its place.
L'idée ici, serait donc de mettre un NSArray en object pour chaque clé Continent. En bref, il faut réfléchir à nouveau sur ton algo/comment enregistrer les données.
Réponses
merci pour ta réponse,
eh bien ce qui me bloque c'est que je n'ai que trois mois de objectiveC dans la tête et que je n'ai pas du tout la façon de penser de la programmation Objet. ça vient doucement. je me paluche des PDF qui expliquent la programmation iPhone, je regarde et fait des tuto avec youtube en essayant de coller des bouts de codes dans mon programme. je sais c'est pas des legos mais c'est la seule manière que j'ai d'avancer.
Ton aide m'est très précieuse.
tu me donnes des pistes très intéressantes que j'ai du mal à mettre en place.
Pour toi c'est simple tu es mouleur de chocolat, moi éleveur de cacaoyers.
Par exemple quand tu dis boucler ? tu veux dire faire une boucle if... else... ?
c'est à dire que mon tableau va s'écrire lignes par lignes ? et avant d'inscrire la ligne je lui dit de découper Africa/Abidjan... ?
En général, une boucle c'est du for ou un while. Rien n'empêche d'avoir es if/else à l'intérieur, mais ça ne compte pas comme boucler.
Pour la boucle for, je vois bien comment faire avec un entier mais avec une liste [timeZone knownTimeZoneNames] je ne vois pas comment faire ??
est ce que je donnes l'information dans le pickerView à cet endroit :
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [self.rouePays objectAtIndex:row];
​est ce à cet endroit que j'utilise componentsSeparatedByString:@/ ? pour modifier "row"
[NSTimeZone knownTimeZoneNames] renvoie un Array de NSString
Donc une moyen de boucler :
ou
Ok je planche dessus, merci
c'est ça qu'il me fallait !
bonjour,
j'ai réussi à séparer les continents des villes et à les avoir dans une variable, le problème avec mon code est qu'il fonctionne quand il y a un "/" dans le array, mais cela se complique quand il n'y en a pas dans [NSTimeZone knownTimeZoneNames] comme par exemple avec @GMT cela bloque ma requête.
De plus, il y a des noms avec plusieurs "/" et là ça bug aussi.
mon souci :
- comment passer @GMT dans ma boucle sans que ça plante ?
- comment gérer les Continents/Pays/villes avec deux "/" ?
je vous mets mon code :
merci
Nomme tes variables en commençant par une minuscule.
NSString *str = [NSString stringWithFormat:@%@", aString]; : Intérêt ?
On préfèrera faire un isEqualToString avec 2 NSString
Il faut que tu vérifies combien il y a d'éléments dans le NSArray que tu as créé avec componentsSeparatedByString. Car objectAtIndex:1 risque de planter.
J'ai mis dans mon exemple : lastObject, car parfois, c'est Continent/Pays/Ville, et non pas que Continent/Ville
merci Larme,
je vais changer les majuscules des variables,
super l'idée de "lastObject"! ça me permet de passer mon problème de @GMT qui dans la liste était tout seul !
Par contre, ça fait bizarre parcequ'il me met ex: "America / Port au Prince", je sais que c'est en termes de fuseaux horaires mais ça fait bizarre ! je ne sais pas si la personne qui part en Martinique va penser à sélectionner America dans le pickerView de gauche pour faire apparaitre Port au Prince dans le pickerView de droite !
peut-être vaut il mieux que je reste sur l'idée d'une table indexée par villes ? plutôt que deux PickerView avec Continents et Villes.
qu'en penses tu ?
En fait, ce qui évite de rentrer dans le GMT tout seul, c'est que je regarde combien d'objets au NSArray.
Si j'avais pas fait ce test (count == 2), tu aurais eu dans les logs Continent:GMT; City:GMT.
Le lastObject me permet surtout d'éviter ça :
Quant au soucis de la Martinique, si dans ton UIPicker, tu dis clairement qu'on choisit son continent, il ne devrait pas avoir de soucis. Je pense que les Martiniquais sont au courant qu'ils ne sont en pas en Europe géographiquement.
super ça avance très bien !
Quand on fait un NSMutableDictionary est -ce que l'on écrit ligne à ligne ou bien il faut que je le sorte de ma boucle ?
Je n'arrive pas à remplir le dictionnaire, il y a un objet "key" et "objects" à chaque passage mais il se vide à chaque boucle .
Puis je solliciter encore votre super pouvoir ?!
merci beaucoup.
J'avoue ne pas être sûr de bien expliquer cela, mais :
Tu utilises des variables locales, qui ne sont présentes que dans le bout de code que tu utilises.
Exemple :
variableA n'existe que dans ce bout de code.
Maintenant, on rajoute des {}.
Du coup :
En général, on ne mets pas des {} gratuitement comme ça (c'est mis via un for, if, etc.)
Pour moi c'est clair ! merci Larme.
Donc je dois remplir mon tableau à l'intérieur des bracklets de la boucle tant que mes variables sont connues.
Est ce qu'un dictionnaire se rempli au fur et à mesure ? car les exemples que je vois sont des objets qui sont rentrés manuellement et non pas par incrémentation.
par exemple :
Exactement.
Il faut que tu mettes/déclares à un " plus haut niveau " ton NSMutableDictionnary (avant la boucle for par exemple).
Et que tu le remplisses au fur et à mesure avec les setObject:forKey.
ça ne copie pas les values :-(
ça passe les value une par une encore, est ce qu'il faut que j'utilise la fonction copyitems ? ou est ce qu'il faut que je remplisse un dictionnaire à l'intérieur et que cela nourrisse celui à l'extérieur des bracklets ?
J'ai pas testé, mais d'un rapide coup d'oe“il, je dirais que tu as 5 entrées de type : Continent : DernièreVilleDeCeContinent.
Auquel cas c'est normal.
Un NSDictionary fonctionne ainsi :
Clé " Valeur (Key"Value/Object).
Le soucis, c'est qu'il y a unicité des clés.
En bref, si tu fais :
En sortie, tu n'auras que
MaCle " First
La Doc le dit clairement :
L'idée ici, serait donc de mettre un NSArray en object pour chaque clé Continent. En bref, il faut réfléchir à nouveau sur ton algo/comment enregistrer les données.