2009-07-07 5 views
2

Meine App besteht aus einem TabBarController, jede Registerkarte mit einem UITableView.Parsen mehrerer XML-Dateien in eine oder mehrere Objektklassen?

Beim Start analysiere ich eine XML-Datei von meinem Server in eine Objektklasse und zeige dann die Objekte in der ersten Tabellenansicht an.

Meine Frage ist, was mache ich, wenn ich eine zweite XML-Datei analysieren möchte? Momentan überschreibt die Information in "XML-Datei-2" die Objekte, die von "XML-Datei-1" analysiert werden. Wie gehe ich richtig vor? Richte ich für jede XML-Datei eine andere Object-Klasse ein oder gibt es eine andere, die das Problem umgeht?

Ich benutze NSXMLParser.

Antwort

1

I Sie sollten zwei Instanzen von XMLParser in Betracht ziehen, einen für jede XML-Datei, die Sie lesen möchten. Es erlaubt Ihnen, so viele XML Dateien gleichzeitig zu lesen, ohne sich gegenseitig zu beeinflussen. Es ist auch modularer.

+0

Das war, was mein erster Gedanke für den besten Ansatz zur Lösung des Problems war; Einrichten mehrerer Objektklassen, um die Objekte von jedem XML-Objekt zu halten, und dann jedes XML-Objekt zum Analysieren der Datei. – runmad

+0

Übrigens. Am Ende habe ich eine XMLParser-Superklasse erstellt und dann den XML-Dateispezifischen Code in die XMLParser-Unterklassen aufgeteilt. Funktioniert super. Ich habe auch eine performSelectorInBackground getan, so dass es im Hintergrund analysiert und hat nicht das Gefühl, dass es zwischen den Registerkarten stecken. – runmad

0

... Überschreiben Sie nicht die Daten, die schon da sind ...?

Wenn Sie den Inhalt in einem UITableView anzeigen, würde ich wetten, dass Sie irgendwo ein NSArray haben. Wenn Sie dies richtig eingerichtet haben, enthält das NSArray hoffentlich Modellobjekte, von denen jedes einer Zeile in Ihrem UITableView entspricht. Ich würde jedoch vorschlagen, NSMutableArray zu verwenden. Wenn Sie dann die zweite XML-Datei analysieren und Ihre Modellobjekte daraus erstellen, verwenden Sie einfach die addObject: -Methode von NSMutableArray und dann reloadData in der UITableView.

+0

Hier ist ein Code-Schnipsel aus Parser.m Datei: http://pastie.org/537227 Alle Kommentare willkommen ... – runmad

+0

@Canada Dev - es mir OK aussieht. Funktioniert es nicht? Denken Sie beim Erstellen des NSXMLParser daran, dieses XMLParser-Objekt als Delegat festzulegen? –

+0

Ja, alles sollte korrekt in meinem AppDelegate eingestellt werden: http://pastie.org/538494 – runmad

1

In Zeile 21 dieses Snippets (http://pastie.org/537227) setzen Sie das Produkt-Array (appDelegate.products) auf ein neues veränderbares Array. Wenn Sie die zweite Lauf appDelegate.products, anhängen wollen, sollten Sie sehen, ob appDelegate.products bereits Objekte in ihm hat, wenn ja, kein neues Array zuweisen, fügen Sie einfach auf sie es NSMutableArray der addObject mit: Methode

0

Wie bereits erwähnt, wäre es die beste Lösung, mehrere NSXMLParser-Instanzen zu erstellen.
Ein Open Source iPhone RSS-Reader namens Simple RSS Reader wäre eine gute Probe von dem, was Sie jetzt wollen.
Sie könnten RSSParser Klasse des einfachen RSS-Reader verwenden, wie es ist.

HTH

Verwandte Themen