2012-04-09 20 views
3

HTTPプロトコルを使用してXMLファイルをダウンロードして、iPhoneアプリでローカルに使用する必要があります。場合によっては、このファイルはサーバー上で更新されますが、頻繁に更新されることはありません。ファイルが変更されていない場合は、もう一度ダウンロードしないでください。

すでにドキュメントフォルダにある既にダウンロードされているファイルと、サーバー上のファイルとを比較し、コンテンツがサーバー上で更新されている場合はダウンロードするだけですか?

+0

名前またはリビジョン日付で表示しますか? – CodaFi

+0

名前でそれとも、日付でも効率的でしょうか? – Winston

+0

ファイルをダウンロードするためにどのプロトコルを使用していますか? HTTP? –

答えて

12

ファイルを初めてダウンロードするときは、応答のLast-Modifiedヘッダーから日付を保存します。 NSHTTPURLResponseオブジェクトから取り出すことができます。

その後の実行では、NSURLRequestIf-Modified-Sinceヘッダーにその日付を入れます。サーバー上のファイルが変更されていない場合、NSHTTPURLResponsestatusCodeは304(「変更されていません」を意味します)であり、応答の本文は空である必要があります。

+0

美しい。私のソリューションよりもはるかに効率的です。 – CodaFi

+0

ありがとう、私はそれを試してみます。日付だけでなく、時間も含めて確認できますか? – Winston

+0

HTTP日付には時間が含まれており、非常に特定の形式です。ヘッダーは[HTTP 1.1仕様のセクション14](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)で定義されています。日付形式は[3.3.1節](http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1)で定義されています。 –

2

あなたが特別という名前のファイルを探すために、ドキュメントディレクトリをトラバースしたい場合は、NSFileManagerの-fileExistsAtPath:isDirectoryを使用して-isEqualToStringで(あなたがNSURLResponseを使用している限り-suggestedFilename)ダウンロードしたファイルの名前と比較します。

リビジョン日付を取得する必要がある場合は、NSFileManagerの-attributesOfItemAtPath:error:をキーNSFileModificationDateとともに使用します。

+0

ファイル名は同じですが、ファイル名も同じであれば?両方のファイルがまったく同じで、もう一度ダウンロードする必要がありますか? – Winston

+0

内容を確認するには、一時ディレクトリにダウンロードしてチェックする必要があります。私は修正日を取得する方法を投稿しました。私のHTTPリクエストの知識はかなり限られています。 HTTPヘッダーから変更日を取得する方法はありますか? – CodaFi

関連する問題