HTTPプロトコルを使用してXMLファイルをダウンロードして、iPhoneアプリでローカルに使用する必要があります。場合によっては、このファイルはサーバー上で更新されますが、頻繁に更新されることはありません。ファイルが変更されていない場合は、もう一度ダウンロードしないでください。
すでにドキュメントフォルダにある既にダウンロードされているファイルと、サーバー上のファイルとを比較し、コンテンツがサーバー上で更新されている場合はダウンロードするだけですか?
HTTPプロトコルを使用してXMLファイルをダウンロードして、iPhoneアプリでローカルに使用する必要があります。場合によっては、このファイルはサーバー上で更新されますが、頻繁に更新されることはありません。ファイルが変更されていない場合は、もう一度ダウンロードしないでください。
すでにドキュメントフォルダにある既にダウンロードされているファイルと、サーバー上のファイルとを比較し、コンテンツがサーバー上で更新されている場合はダウンロードするだけですか?
ファイルを初めてダウンロードするときは、応答のLast-Modifiedヘッダーから日付を保存します。 NSHTTPURLResponse
オブジェクトから取り出すことができます。
その後の実行では、NSURLRequest
のIf-Modified-Since
ヘッダーにその日付を入れます。サーバー上のファイルが変更されていない場合、NSHTTPURLResponse
のstatusCode
は304(「変更されていません」を意味します)であり、応答の本文は空である必要があります。
美しい。私のソリューションよりもはるかに効率的です。 – CodaFi
ありがとう、私はそれを試してみます。日付だけでなく、時間も含めて確認できますか? – Winston
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)で定義されています。 –
あなたが特別という名前のファイルを探すために、ドキュメントディレクトリをトラバースしたい場合は、NSFileManagerの-fileExistsAtPath:isDirectory
を使用して-isEqualToString
で(あなたがNSURLResponseを使用している限り-suggestedFilename
)ダウンロードしたファイルの名前と比較します。
リビジョン日付を取得する必要がある場合は、NSFileManagerの-attributesOfItemAtPath:error:
をキーNSFileModificationDateとともに使用します。
名前またはリビジョン日付で表示しますか? – CodaFi
名前でそれとも、日付でも効率的でしょうか? – Winston
ファイルをダウンロードするためにどのプロトコルを使用していますか? HTTP? –