2009-07-07 4 views
2

Mon application est composée d'un TabBarController, chaque onglet avec un UITableView. Au lancement, j'analyse un fichier XML de mon serveur dans une classe Object, puis j'affiche les objets dans la première tableview.Analyse de plusieurs fichiers XML en une ou plusieurs classes d'objets?

Ma question est, qu'est-ce que je fais quand je veux analyser un deuxième fichier XML? Actuellement, ce faisant, les informations contenues dans "XML-file-2" écraseront les objets analysés par "XML-file-1". Comment puis-je m'y prendre correctement? Dois-je configurer une autre classe Object pour chaque fichier XML ou y en a-t-il une autre pour contourner le problème?

J'utilise NSXMLParser.

Répondre

1

I pense que vous devriez envisager d'avoir deux instances de XMLParser, une pour chaque fichier XML que vous voulez lire. Il vous permet de lire simultanément autant de fichiers XML sans s'influencer mutuellement. C'est aussi plus modulaire.

+0

C'est ce que ma pensée initiale était pour la meilleure approche pour résoudre le problème; mettre en place plusieurs classes d'objets pour contenir les objets de chaque XML I analyser, puis chacun a XML pour analyser le fichier. – runmad

+0

Au fait. J'ai fini par créer une super classe XMLParser, puis j'ai divisé le code spécifique au fichier XML dans les sous-classes XMLParser. Fonctionne très bien. En outre, je me suis assuré de faire un execSelectorInBackground afin qu'il analyse en arrière-plan et n'a pas l'impression d'être coincé entre les onglets. – runmad

0

... Ne pas écraser les données qui sont déjà là ...?

Si vous affichez le contenu dans un UITableView, alors je serais prêt à parier que vous avez un NSArray quelque part. Heureusement, si vous l'avez configuré correctement, NSArray contient des objets de modèle, dont chacun correspond à une ligne de votre UITableView. Cependant, je suggère d'utiliser NSMutableArray. Ensuite, lorsque vous analysez le deuxième fichier XML et créez vos objets de modèle à partir de cela, utilisez simplement la méthode addObject: de NSMutableArray, puis reloadData sur UITableView.

+0

Voici un extrait de code de fichier Parser.m: http://pastie.org/537227 Tous les commentaires sont les bienvenus ... – runmad

+0

@Canada Dev - il semble OK pour moi. Est-ce que ça ne marche pas? Lorsque vous créez le NSXMLParser vous souvenez-vous de définir cet objet XMLParser en tant que délégué? –

+0

Ouais, tout devrait être réglé correctement dans mon AppDelegate: http://pastie.org/538494 – runmad

1

Sur la ligne 21 de cet extrait (http://pastie.org/537227), vous définissez le tableau de produits (appDelegate.products) sur un nouveau tableau mutable. si vous voulez la deuxième manche à ajouter à appDelegate.products, vous devriez voir si appDelegate.products a déjà des objets qu'il contient, le cas échéant, ne pas affecter un nouveau tableau à lui, il suffit de les ajouter à lui en utilisant la addObject de NSMutableArray: Méthode

0

Comme notnoop déjà mentionné, faire plusieurs instances de NSXMLParser serait la meilleure solution.
Un lecteur RSS iPhone open source appelé Simple RSS Reader serait un bon échantillon de ce que vous voulez maintenant.
Vous pouvez utiliser la classe RSSParser du lecteur Simple RSS tel quel.

HTH

Questions connexes