alors là je suis coincé à la partie la plus simple (ou alors je pensais) de mon petit projet pour ce matin. L'objectif était de construire un simple XML Parser qui prend chaque élément qu'ils rencontrent et l'ajoute à un dictionnaire qui finira par contenir toutes les paires clé/valeur du XML.NSMutableDictionary ne prend pas la paire clé/valeur
donc un xml comme celui-ci
<xml>
<1stTag>text</1stTag>
<2ndTag>some more text</2ndTag>
</xml>
finirais dans un dictionnaire avec 2 paires clé/valeur:
{
1stTag:text;
2ndTag:some more text;
}
L'adoption du Cadre NSXMLParser je pensais que je venais de stocker tous rencontrés élément et textes dans les variables self.elementInProgress et self.textInProgress (toutes deux NSStrings). Une fois l'élément terminé, j'ajouterais la paire au dictionnaire.
Voici donc le fichier .h:
@interface MSParser : NSObject <NSXMLParserDelegate>
{
NSString *elementInProgress;
NSString *textInProgress;
NSMutableDictionary *parsedXMLDict;
}
@property (nonatomic, retain) NSString *textInProgress;
@property (nonatomic, retain) NSString *elementInProgress;
@property (nonatomic, retain) NSMutableDictionary *parsedXMLDict;
Et la fonction correspondante dans le fichier de mise en œuvre:
@synthesize textInProgress, elementInProgress, parsedXMLDict;
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
[self.parsedXMLDict setValue:self.textInProgress forKey:self.elementInProgress];
NSLog(@"%@",[self.parsedXMLDict valueForKey:self.elementInProgress]);
}
Maintenant, me voici, perplexe que mon NSLog renvoie Null! Et j'ai pensé que c'était une évidence. Qu'est-ce que je rate? Self.textInProgress et self.elementInProgress sont remplis correctement en fonction du débogueur. Je peux tracer jusqu'à cette ligne où j'appelle setValue ForKey, ce qui est encore selon la documentation et a travaillé plus d'une fois auparavant pour moi. Le dictionnaire ne prend tout simplement pas les valeurs. D'après la documentation, ça ne ferait qu'agir, si le setValue passé était nul, ce qui n'est pas ici ... Des idées?
Tout semble bien, pas les erreurs ou les avertissements du compilateur, il retourne juste Null. Stumped, comme je l'ai dit ...
Avez-vous déjà défini vos valeurs elementInProgress et textInProgress? – Eiko