je suis confronté à n truc étrange avec des NSDictionary cascadés.
Soit un premier dictionnaire, contenant des données NSString et integer.
Je le convertis en texte via le selecteur [NSDictionary description]
puis le stocke comme NSString dans un second dictionnaire.
Cette opération marche à merveille. Je sauvegarde le tout dans un
fichier. Son contenu est exactement celui que je recherche.
Le problème se pose lorsque je cherche à réaliser l'opération inverse.
Etape 1 : Je récupère parfaitement mon dictionnaire "racine" et son
contenu est correct (verification par NSLog, RAS).
Etape 2 : J'essaie alors d'en extraire mon dictionnaire "fils" toujours
sous forme de NSString. Et là le contenu de ce dictionnaire "fils" (ou
en tout cas l'un des objets integer qu'il contient) a changé par rapport
à l'étape 1.
Bref là je sèche. Quelqu'un aurait-il une idée/explication ?
Je ne mets que la partie restore. Dans l'autre sens tout est ok.
- (void) restoreFromDictionary:(NSDictionary *)data inListe:(Liste *)liste { /* data contient bien les données attendues */ int i; Item *index; NSString *contenuItem; NSString *strKey;
for(i=0; i<([liste tailleListe]-1)*2;i++) { strKey=[NSString stringWithFormat:@"Item %d",i]; contenuItem=(NSString *)[data objectForKey:strKey]; /* Là les données ne sont plus les mêmes */ index=(Item *)[database objectAtIndex:i]; /* database est une NSArray qui contient des Item précédemment aloués et initialisés à vide */ [index restore:contenuItem pourListe:liste]; } }
Pour info, voici un extrait des dictionnaires manipulés. Tout d'abord un extrait de data (j'ai mis qu'un item pour simplifier) :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Classement</key> <string>Navigation</string> <key>Item 0</key> <string>{ "Cle 0" = "{n Local = data1; n "Flag ok" = 1; n Distant = data2; n}"; "Cle 1" = "{n Local = data2; n "Flag ok" = 1; n Distant = data3; n}"; "Cle 2" = "{n Local = data3; n "Flag ok" = 0; n Distant data1; n}"; }</string> </dict>
Et maintenant le contenu de contenuIndex pour l'itération correspondante :
"Cle 0" = "{n Local = data1; n "Flag ok" = 0; n Distant = data2; n}"; "Cle 1" = "{n Local = data2; n "Flag ok" = 0; n Distant = data3; n}"; "Cle 2" = "{n Local = data3; n "Flag ok" = 0; n Distant data1; n}
La valeur de flag Ok semble se perdre en route. Mais je vois vraiment pas où.
-- |/ |arpok http://karpok.free.fr
Jérôme Lebel <jeromelebel@mac.com> wrote:
fait voir ton code ?
Je ne mets que la partie restore. Dans l'autre sens tout est ok.
- (void) restoreFromDictionary:(NSDictionary *)data inListe:(Liste
*)liste {
/* data contient bien les données attendues */
int i;
Item *index;
NSString *contenuItem;
NSString *strKey;
for(i=0; i<([liste tailleListe]-1)*2;i++)
{
strKey=[NSString stringWithFormat:@"Item %d",i];
contenuItem=(NSString *)[data objectForKey:strKey];
/* Là les données ne sont plus les mêmes */
index=(Item *)[database objectAtIndex:i];
/* database est une NSArray qui contient des Item
précédemment aloués et initialisés à vide */
[index restore:contenuItem pourListe:liste];
}
}
Pour info, voici un extrait des dictionnaires manipulés.
Tout d'abord un extrait de data (j'ai mis qu'un item pour simplifier) :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Classement</key>
<string>Navigation</string>
<key>Item 0</key>
<string>{
"Cle 0" = "{n Local = data1; n "Flag ok" = 1; n Distant
= data2; n}";
"Cle 1" = "{n Local = data2; n "Flag ok" = 1; n Distant
= data3; n}";
"Cle 2" = "{n Local = data3; n "Flag ok" = 0; n Distant data1; n}";
}</string>
</dict>
Et maintenant le contenu de contenuIndex pour l'itération correspondante
:
"Cle 0" = "{n Local = data1; n "Flag ok" = 0; n Distant
= data2; n}";
"Cle 1" = "{n Local = data2; n "Flag ok" = 0; n Distant
= data3; n}";
"Cle 2" = "{n Local = data3; n "Flag ok" = 0; n Distant data1; n}
La valeur de flag Ok semble se perdre en route. Mais je vois vraiment
pas où.
Je ne mets que la partie restore. Dans l'autre sens tout est ok.
- (void) restoreFromDictionary:(NSDictionary *)data inListe:(Liste *)liste { /* data contient bien les données attendues */ int i; Item *index; NSString *contenuItem; NSString *strKey;
for(i=0; i<([liste tailleListe]-1)*2;i++) { strKey=[NSString stringWithFormat:@"Item %d",i]; contenuItem=(NSString *)[data objectForKey:strKey]; /* Là les données ne sont plus les mêmes */ index=(Item *)[database objectAtIndex:i]; /* database est une NSArray qui contient des Item précédemment aloués et initialisés à vide */ [index restore:contenuItem pourListe:liste]; } }
Pour info, voici un extrait des dictionnaires manipulés. Tout d'abord un extrait de data (j'ai mis qu'un item pour simplifier) :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Classement</key> <string>Navigation</string> <key>Item 0</key> <string>{ "Cle 0" = "{n Local = data1; n "Flag ok" = 1; n Distant = data2; n}"; "Cle 1" = "{n Local = data2; n "Flag ok" = 1; n Distant = data3; n}"; "Cle 2" = "{n Local = data3; n "Flag ok" = 0; n Distant data1; n}"; }</string> </dict>
Et maintenant le contenu de contenuIndex pour l'itération correspondante :
"Cle 0" = "{n Local = data1; n "Flag ok" = 0; n Distant = data2; n}"; "Cle 1" = "{n Local = data2; n "Flag ok" = 0; n Distant = data3; n}"; "Cle 2" = "{n Local = data3; n "Flag ok" = 0; n Distant data1; n}
La valeur de flag Ok semble se perdre en route. Mais je vois vraiment pas où.
-- |/ |arpok http://karpok.free.fr
thomas-ml
Stéphane Deglin wrote:
Soit un premier dictionnaire, contenant des données NSString et integer. Je le convertis en texte via le selecteur [NSDictionary description] puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans l'autre, sans passer par l'étape "chaîne" !
-- Thomas Deniau "Unix is user friendly. It's just selective when choosing friends."
Soit un premier dictionnaire, contenant des données NSString et integer.
Je le convertis en texte via le selecteur [NSDictionary description]
puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans
l'autre, sans passer par l'étape "chaîne" !
--
Thomas Deniau
"Unix is user friendly. It's just selective when choosing friends."
Soit un premier dictionnaire, contenant des données NSString et integer. Je le convertis en texte via le selecteur [NSDictionary description] puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans l'autre, sans passer par l'étape "chaîne" !
-- Thomas Deniau "Unix is user friendly. It's just selective when choosing friends."
sdeglin_no_masp
Thomas Deniau wrote:
Stéphane Deglin wrote:
Soit un premier dictionnaire, contenant des données NSString et integer. Je le convertis en texte via le selecteur [NSDictionary description] puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans l'autre, sans passer par l'étape "chaîne" !
C'était l'idée de départ. Je sais plus pourquoi j'avais du y renconcer.
Soit un premier dictionnaire, contenant des données NSString et integer.
Je le convertis en texte via le selecteur [NSDictionary description]
puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans
l'autre, sans passer par l'étape "chaîne" !
C'était l'idée de départ. Je sais plus pourquoi j'avais du y renconcer.
Soit un premier dictionnaire, contenant des données NSString et integer. Je le convertis en texte via le selecteur [NSDictionary description] puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans l'autre, sans passer par l'étape "chaîne" !
C'était l'idée de départ. Je sais plus pourquoi j'avais du y renconcer.
-- |/ |arpok http://karpok.free.fr
sdeglin_no_masp
Stéphane Deglin wrote:
Thomas Deniau wrote:
Stéphane Deglin wrote:
Soit un premier dictionnaire, contenant des données NSString et integer. Je le convertis en texte via le selecteur [NSDictionary description] puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans l'autre, sans passer par l'étape "chaîne" !
C'était l'idée de départ. Je sais plus pourquoi j'avais du y renconcer.
Après vérification c'est effectivement plus simple mais ça ne résoud pas mon problème. Mais bon c'est vrai que je suis un spécialiste des bug incompréhensibles.
Soit un premier dictionnaire, contenant des données NSString et integer.
Je le convertis en texte via le selecteur [NSDictionary description]
puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans
l'autre, sans passer par l'étape "chaîne" !
C'était l'idée de départ. Je sais plus pourquoi j'avais du y renconcer.
Après vérification c'est effectivement plus simple mais ça ne résoud pas
mon problème.
Mais bon c'est vrai que je suis un spécialiste des bug
incompréhensibles.
Soit un premier dictionnaire, contenant des données NSString et integer. Je le convertis en texte via le selecteur [NSDictionary description] puis le stocke comme NSString dans un second dictionnaire.
Pourquoi se compliquer la vie ? Stocke directement un dictionnaire dans l'autre, sans passer par l'étape "chaîne" !
C'était l'idée de départ. Je sais plus pourquoi j'avais du y renconcer.
Après vérification c'est effectivement plus simple mais ça ne résoud pas mon problème. Mais bon c'est vrai que je suis un spécialiste des bug incompréhensibles.
-- |/ |arpok http://karpok.free.fr
thomas-ml
Stéphane Deglin wrote:
Après vérification c'est effectivement plus simple mais ça ne résoud pas mon problème.
Envoie le code actuel, et on essaiera de dépatouiller ça. Ca sera plus direct que via la chaine, déjà.
-- Thomas Deniau "Unix is user friendly. It's just selective when choosing friends."
Après vérification c'est effectivement plus simple mais ça ne résoud pas mon problème.
Envoie le code actuel, et on essaiera de dépatouiller ça. Ca sera plus direct que via la chaine, déjà.
-- Thomas Deniau "Unix is user friendly. It's just selective when choosing friends."
sdeglin_no_masp
Thomas Deniau wrote:
Envoie le code actuel, et on essaiera de dépatouiller ça. Ca sera plus direct que via la chaine, déjà.
Bon ben ayant enfin eu un peu de temps ce we pour vous envoyer un bout de code clair avec simulation du problème, j'ai découvert qu'il n'y avait plus de problème ! :o) En fait cela semblait venir de l'imbrication des NSString qui avait un comportement bizarre. Admettons. Lorsque j'avais fait le remplacement par des NSDictionary la première fois, ça n'avait pas marché parce qu'il me restait des merdes dans mes fichiers de test. Mais maintenant tout est rentré dans l'ordre dès que j'en eu recréé des nouveaux. Quel bordel ces codes qu'on laisse trainer pendant des mois sans y regarder !
En tout cas encore merci à vous pour votre petit coup de souris.
-- |/ |arpok http://karpok.free.fr
Thomas Deniau <thomas-ml@deniau.org> wrote:
Envoie le code actuel, et on essaiera de dépatouiller ça. Ca sera plus
direct que via la chaine, déjà.
Bon ben ayant enfin eu un peu de temps ce we pour vous envoyer un bout
de code clair avec simulation du problème, j'ai découvert qu'il n'y
avait plus de problème ! :o)
En fait cela semblait venir de l'imbrication des NSString qui avait un
comportement bizarre. Admettons.
Lorsque j'avais fait le remplacement par des NSDictionary la première
fois, ça n'avait pas marché parce qu'il me restait des merdes dans mes
fichiers de test.
Mais maintenant tout est rentré dans l'ordre dès que j'en eu recréé des
nouveaux.
Quel bordel ces codes qu'on laisse trainer pendant des mois sans y
regarder !
En tout cas encore merci à vous pour votre petit coup de souris.
Envoie le code actuel, et on essaiera de dépatouiller ça. Ca sera plus direct que via la chaine, déjà.
Bon ben ayant enfin eu un peu de temps ce we pour vous envoyer un bout de code clair avec simulation du problème, j'ai découvert qu'il n'y avait plus de problème ! :o) En fait cela semblait venir de l'imbrication des NSString qui avait un comportement bizarre. Admettons. Lorsque j'avais fait le remplacement par des NSDictionary la première fois, ça n'avait pas marché parce qu'il me restait des merdes dans mes fichiers de test. Mais maintenant tout est rentré dans l'ordre dès que j'en eu recréé des nouveaux. Quel bordel ces codes qu'on laisse trainer pendant des mois sans y regarder !
En tout cas encore merci à vous pour votre petit coup de souris.