Frage

Ich bin gespannt, für diejenigen, die bauen iPhone-Apps auf Basis von REST / SOAP / XML-RPC oder einfach nach unten zieht einen dynamischen XML-Feed, was bedeutet es für Sie genau, wann ein Benutzer sagt ‚Refresh‘ der Feed ?

Der gerade Weg nach vorn ist eine Sammlung zu füllen, sagt einen NSMutableArray, mit dem, was man aus dem Futter bringen. Wenn ein Widget auf der Benutzeroberfläche zu aktualisieren verfügbar ist, ich in der Regel so etwas wie:

[myMutableArray removeAllObjects];
// follow steps to repopulate myMutableArray

Es scheint dies die am wenigsten effizienten Algorithmus ist eine XML-Feed zum Auffrischen. So viele Leute, die Twitter-Clients bauen, werden Änderungen an ihrer bestehenden Futtermittel, gegen die Senkung der gesamten Feed in seiner vollständigen Form anhängt wieder.

Welche Art von Algorithmen werden Sie mit auf Ihre Modelle „aktualisieren“, wenn auf einer serverseitigen Datenquelle sprechen?

Danke alle.

War es hilfreich?

Lösung

Sie sollten prüfen, mit dem PubSub Rahmen, wenn Sie OS X 10.5 benötigen können. Es ist ausdrücklich zu holen und aktualisieren RSS entworfen / Atom-Feeds.

(Disclaimer: Ich schrieb eine Menge dieses Rahmens, während ich bei Apple war:)

Die Antwort auf Ihre Frage ist, dass RSS-Feeds von Natur aus ineffizient ist. Sie können diese minimieren, indem

  1. HTTP mit „conditional GETs“, also wenn der Vorschub auf dem Server nicht geändert hat gerade Sie bekommen wieder eine winzige 304 Antwort. Das spart Zeit für den Server und für Sie. (Einige Feed-Server, wie Slashdot, werden Sie verbieten, wenn Sie nicht verwenden bedingte bekommt!)

  2. Überprüfen Sie die "Last-Modified:" Datum auf die Antwort. Ja, auch wenn Sie eine bedingte GET verwenden. Einige Server behandeln sie nicht richtig. Wenn das Datum unverändert ist, ignorieren Sie die Feed.

  3. Vergleichen Sie die Rohdaten der Reaktion gegen den letzten Rohantwort Sie. Wenn sie identisch sind, ignorieren Sie die Feed. (Einige Server unterstützen keine bedingte bekommt oder senden zuletzt geänderten Daten ...)

  4. Nun müssen Sie die XML analysieren.

  5. überprüfen Sie das Top-Level-mod Datum auf dem Futter selbst (dies variiert zwischen Atom und den verschiedenen Aromen von RSS.) Noch einmal, wenn es die gleichen, wie es beim letzten Mal, war das Futter ignorieren.

  6. Wenn Sie hier bekommen, ist der Feed aktualisiert worden ist, am wahrscheinlichsten. Die einfachste Sache zu tun ist, wegzuwerfen alle Ihre alten gespeicherten Einträge und ersetzen Sie sie durch die neuen. Aber das bedeutet, dass Sie nicht ‚historisch‘ Einträge halten können, die aus dem Ende des Zulaufs gefallen sind. Wenn Sie wollen, dass, müssen Sie in der gerade analysiert Feed durch jeden Eintrag gehen, passen sie mit dem entsprechenden Eintrag in der persistenten Speicherung und Aktualisierung der persistenten eine auf der neuen Basis. Wenn Sie nicht einen persistenten finden können, fügen Sie ihn als neuen Eintrag. (Matching-Einträge kann in lame RSS-Feeds schwierig sein, die nicht enthalten eindeutiges GUIDs für jeden Eintrag. Sie müssen versuchen, Permalinks und Titel zu vergleichen. Igitt.)

Das Ganze ist wirklich ein großes Durcheinander. Es dauerte eine Menge Arbeit, um alles richtig zu machen verhalten und arbeiten mit allen gebrochenen Feeds und Server da draußen; Nutzen Sie meine Schmerzen und verwenden PubSub, wenn Sie können:)

Andere Tipps

Ein Ansatz in der gebaut unter Verwendung NSXML Pull-Parser in einem Hintergrund-Thread und den Vergleich Einträge aus dem Stream zu dem, was man in Erinnerung haben, die Aktualisierung nur das, was sich geändert hat.

Ich habe gerade eine Open-Source veröffentlicht RSS / Atom-Parser für iPhone und hoffentlich kann es von einigen sein verwenden.

Ich würde gerne Ihre Gedanken auf sie hören!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top