2012-04-09 3 views
3

Ich muss eine XML-Datei herunterladen, die das HTTP-Protokoll verwendet, um sie lokal in meiner iPhone App zu verwenden. Gelegentlich wird diese Datei auf dem Server aktualisiert, aber nicht sehr oft.Vermeiden Sie es, eine Datei erneut herunterzuladen, wenn sie nicht geändert wurde

Wie kann ich die bereits heruntergeladene Datei, die sich bereits im Ordner "Dokumente" befindet, mit der auf dem Server vergleichen und sie nur herunterladen, wenn der Inhalt auf dem Server aktualisiert wurde?

+0

Nach Name oder nach Überarbeitungsdatum? – CodaFi

+0

Nach Name. Oder nach Datum wäre auch effizient? – Winston

+0

Welches Protokoll verwenden Sie, um die Datei herunterzuladen? HTTP? –

Antwort

12

Wenn Sie die Datei zum ersten Mal herunterladen, speichern Sie das Datum aus dem Last-Modified-Header der Antwort. Sie können es aus dem Objekt NSHTTPURLResponse herausziehen.

Bei nachfolgenden Läufen dieses Datum in die If-Modified-Since Kopfzeile der NSURLRequest eingeben. Wenn sich die Datei auf dem Server nicht geändert hat, sollte die statusCode der NSHTTPURLResponse 304 sein (was "Nicht geändert" bedeutet) und der Hauptteil der Antwort sollte leer sein.

+0

Schön. Viel effizienter als meine Lösung. – CodaFi

+0

Danke Rob, ich werde es versuchen. Kann ich das nicht nur nach Datum, sondern auch nach Uhrzeit überprüfen? – Winston

+0

Ein HTTP-Datum enthält die Uhrzeit und ist in einem sehr spezifischen Format. Die Header sind in [Abschnitt 14 der HTTP 1.1-Spezifikation] definiert (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). Das Datumsformat ist in [Abschnitt 3.3.1] definiert (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1). –

2

Wenn Sie das Dokumentenverzeichnis suchen eine speziell benannte Datei verfahren möchten, verwenden Sie NSFileManager -fileExistsAtPath:isDirectory und vergleichen Sie es mit dem Namen der heruntergeladenen Datei (-suggestedFilename solange Sie NSURLResponse verwenden) mit -isEqualToString.

Wenn Sie ein Revisionsdatum benötigen, verwenden Sie NSFileManager -attributesOfItemAtPath:error: in Verbindung mit dem Schlüssel NSFileModificationDate.

+0

Der Dateiname wäre der gleiche, aber wenn der contant der gleiche ist? Muss ich es erneut herunterladen, wobei beide Dateien genau gleich sind? – Winston

+0

Die Überprüfung ihres Inhalts würde das Herunterladen in ein temporäres Verzeichnis und die Überprüfung beinhalten. Ich habe den Weg bekanntgegeben, um ein Änderungsdatum zu erhalten. obwohl mein Wissen über HTTP-Anfragen ziemlich begrenzt ist. Gibt es eine Möglichkeit, das Änderungsdatum vom HTTP-Header abzurufen? – CodaFi

Verwandte Themen