2010-06-17 10 views
0

J'utilise NSXMLParser dans mon fichier RootViewController.m.Envoyer des informations de délégué [iPhone]

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:response_data]; 
[xmlParser setDelegate:self]; 
[xmlParser parse]; 
[xmlParser release]; 

Je met également en œuvre cette méthode pour ajouter des entrées à un dictionnaire défini dans RootViewController.m pour une utilisation ultérieure:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 

Cependant, je voudrais obtenir plus d'un fichier XML et faire des choses différentes avec ses nœuds; Cela ressemble à ce que j'ai besoin d'utiliser des fichiers externes en tant que délégués. Ma question est:

Si je les fichiers d'implémentation suivants (& leurs fichiers d'en-tête):

  • RootViewController.m
  • XMLDelegate1.m
  • XMLDelegate2.m

et définir le ie délégué NSXMLParser à être XMLDelegate i .m, comment puis-je t ces fichiers pour retourner un NSDictionary que je peux ensuite ajouter au NSDictionary défini dans RootViewController.m?

Je suppose qu'il ya deux réponses possibles:

  1. Utilisez une méthode que je ne sais pas; ou
  2. utiliser un meilleur flux de travail

Je pense qu'il est 2, mais espère que c'est 1.

Merci, Andy

MISE À JOUR: J'ai trouvé un moyen de parvenir à la but, même si je ne suis pas convaincu que c'est la meilleure façon. Fondamentalement, je demande à mon délégué de mettre à jour un fichier Plist et d'utiliser le centre de notifications pour savoir quand cela se produit.

Répondre

1

Il y a une bonne discussion de ce "problème" dans la section Event-Driven XML Programming Guide d'Apple. La section sur "Utiliser plusieurs délégués" aborde une stratégie à utiliser. Le document inclut la liste de code pour la classe Element qui est l'endroit où les «smarts» de l'algorithme vivent. Dans l'exemple de code, l'auteur suppose que le lecteur sait que l'exemple concerne une classe Element qui possède des propriétés parent, name, attribute, children et parser. La classe Element implémente le protocole NSXMLParserDelegate. La classe Element aura également une propriété NSMutableString *content qui est mise à jour dans une méthode - (void)appendString:(NSString *)aString qui n'est pas incluse dans l'exemple.

0

Pas exemple de réponse de code, mais un modèle un, si je comprends bien votre question:

Vous pourriez peut définir simplement une classe, faire cas de celui-ci, faire des instances correspondant de l'analyseur, puis définir manuellement les instances de l'analyseur pour utiliser les instances de la classe en tant que délégué ... Chacune de ces instances de classe pourrait ajouter son DOM à un tableau global connu.

C'est un moyen. la programmation des délégués (n'utilisant pas IB) ressemble à ce que vous voulez.

+0

Le problème que j'ai eu avec faire une sorte de classe XMLController.m qui gère toute l'analyse XML est que la méthode didStartElement ne retourne rien, en particulier pas à l'appel d'origine de mon RootViewController.m .. y at-il un moyen de contourner cela? – Andy