リモートサーバー上にいくつかの.pngファイルがあるフォルダがあります。私は私のアプリの中からこれらをダウンロードし、それらをアプリケーションの「Documents」フォルダに保存したいと思っています。これどうやってするの?インターネットからファイルをダウンロードしてiPhoneの「ドキュメント」に保存する方法は?
5
A
答えて
13
簡単な方法は、NSDataの便利なメソッドinitWithContentOfURL:
とwriteToFile:atomically:
を使用してデータを取得して書き出すことです。これは同期的であり、フェッチと書き込みが完了するまで実行するスレッドをブロックします。例えば
:documentsDirectory
方法はthis questionから臆面もなく盗まれ
// Create and escape the URL for the fetch
NSString *URLString = @"http://example.com/example.png";
NSURL *URL = [NSURL URLWithString:
[URLString stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding]];
// Do the fetch - blocks!
NSData *imageData = [NSData dataWithContentsOfURL:URL];
if(imageData == nil) {
// Error - handle appropriately
}
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
:
- (NSString *)documentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
しかし、あなたが意図していない限りは、自分がこのファイルのダウンロード中も、UIの活動を停止します、それをスレッドします。代わりに、NSURLConnectionとそのデリゲートを調べることができます。バックグラウンドでダウンロードして、非同期にダウンロードされたデータについてデリゲートに通知するので、NSMutableDataのインスタンスを構築して接続が完了したときに書き出すことができます。
少し詳細は、dataAccumulator
を宣言し、エラーを処理するように、読者に委ねられている:)重要な文書
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the data to some preexisting @property NSMutableData *dataAccumulator;
[self.dataAccumulator appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Do the write
NSString *filePath = [[self documentsDirectory]
stringByAppendingPathComponent:@"image.png"];
[imageData writeToFile:filePath atomically:YES];
}
:
- NSData をあなたのデリゲートのようなメソッドが含まれている場合があります
- NSURLConnection
関連する問題
- 1. ダウンロードしたファイルをサーバーからJavaに保存する方法
- 2. iPhone:メディアファイルをダウンロードしてデバイスに保存する方法
- 3. ブラウザプロジェクトからSL4でインターネット(http)ファイルをダウンロードする方法は?
- 4. iPhone上のアプリケーションからPDFファイルを保存して表示する方法は?
- 5. インターネットからiPhoneアプリに画像を保存する
- 6. Windows Phone 7でインターネットからMP3ファイルを保存する方法は?
- 7. インターネットからDoc/PDFをダウンロードし、内部メモリに保存してください
- 8. javaを使用してインターネットからファイルをダウンロードする:認証方法?
- 9. 定期的にインターネットからiPhoneにデータをダウンロードする最も良い方法
- 10. AFNetworking 3.0を使用してファイルをダウンロードし、ローカルに保存する方法は?
- 11. URLからファイルをダウンロードし、私はURLからファイルをダウンロードし、メモリカートに保存しようとしてい
- 12. ダウンロードしたファイルをキャッシュに保存する方法android
- 13. DjangoのftpダウンロードからImageFieldに保存する方法
- 14. ファイルをiPhoneに保存する方法は?
- 15. インターネットからアセットフォルダにデータを保存
- 16. ダウンロードしたコンテンツからPListに配列を保存してiPhoneのテーブルビューに保存
- 17. ウェブからダウンロードした画像をキャッシュに保存する方法は?
- 18. ダウンロードしたファイルを保存する最も良い方法は何ですか?
- 19. ビデオをダウンロードしてipadに保存する方法
- 20. webserverからwp7のアプリケーションサンドボックスにファイルを保存する方法は?
- 21. iPhone - アプリケーションからユーザー設定を保存する方法は?
- 22. iPhone SDKを使用してiPod音楽ファイルをiPhoneアプリケーションに保存する方法はありますか?
- 23. iphoneにファイルを保存し、URLでファイルを取得する正しい方法
- 24. ファイルをダウンロードして別のファイル名で保存するwgetコマンド
- 25. ファイルからダイナミックアレイに行を保存して印刷する方法は?
- 26. インターネットから写真を保存するには?
- 27. http URLからファイルをダウンロードし、後で使用するためにiPhoneに保存するよりも?
- 28. SOAPからのファイル、保存方法?
- 29. ファイルをダウンロードするダイアログボックスを保存する、ASP.NETサーバーからクライアントにファイルを保存する
- 30. ダウンロードしたファイルをCocoaに保存
ありがとう!うーん...同期?これは、作業が完了している間に「進歩車/バー」をよりよく使用したことを意味しますか? – RexOnRoids
同期は、ダウンロードが完了するまで、プログラム内のすべてのアクティビティ(メインスレッド)が完全に停止することを意味します。つまり、UIはユーザーに固定された状態で表示され、スピナーはダウンロードが完了するまでアニメーションを開始しません(かなり役に立たなくなります)。 2番目の方法は、非同期ダウンロードで、プログラムをバックグラウンドでダウンロードしながらフォアグラウンドで作業させ続けることができます。いずれにしても、ある種の進捗インジケータを使用する必要があります。 – Tim