2011-06-26 4 views
0

MKMapViewで使用するタイルをダウンロードするのにASIHTTPRequestを使用しています。 NSData変数にダウンロードしたものをダウンロードしてコードをテストします。 (私のファイルは平均50MBです)これは基本的にはthis未回答の質問とほぼ同じです。ASIHTTPRequestを使用してアプリケーションビルドパスにNSDataを保存する

私は直接、私は私のアプリのビルドの内側にあると呼ばれるフォルダ内のファイルを必要とするのMapViewのためにファイル例えば:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"]; 

に私のウェブサーバからファイルをダウンロードできることを見出しました。

/var/mobile/Applications/887F4691-3B75-448F-9384-31EBF4E3B63E/MyApp.app/Tiles

私が呼ばれたとき、私が見つけた:それは、このディレクトリで終わる

NSLog(@"%@",[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Tiles"]); 

私が今しようとしているのは、これらのファイルをダウンロードして(複数に注意してください)、フォルダに入れてください。まず、これらの画像を一緒にZIPして、後で自分のデバイス上に展開してフォルダに置くか、すべての画像を別々にダウンロードすることができます(私は既にすべてのファイル名を知っているので簡単です)

このコードを試してみるとエラーになります。タイルをロードする直前にマップビューのviewDidLoadにあります。 ダウンロードコードをテストするためだけにあることに注意してください。後でどこか別の場所でボタンによって起動されます。ここで

はコードです:

NSURL *url = [NSURL URLWithString:@"http://...my-website.../25.png"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDownloadDestinationPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Tiles"]]; // THE PROBLEMATIC LINE 
[request startSynchronous]; 
NSError *error = [request error]; 
if(!error) 
{ 
    NSLog(@"Loaded Map"); 
} 
else 
{ 
    NSLog(@"Error occured while loading map"); 
    NSLog(@"%@",error); 
} 

そして、これはコンソールに表示されます。

2011-06-26 21:12:09.651 MyApp[5309:707] Error occured while loading map 
2011-06-26 21:12:09.669 MyApp[5309:707] Error Domain=ASIHTTPRequestErrorDomain Code=8 "Failed to delete file at path '/var/mobile/Applications/887F4691-3B75-448F-9384-31EBF4E3B63E/MyApp.app/Tiles'" UserInfo=0x184b20 {NSUnderlyingError=0x1d4ac0 "The operation couldn’t be completed. (Cocoa error 513.)", NSLocalizedDescription=Failed to delete file at path '/var/mobile/Applications/887F4691-3B75-448F-9384-31EBF4E3B63E/MyApp.app/Tiles'} 

それでは、どのように私は私が見つけることができるiPhone上のディレクトリにダウンロードしたファイルを保存することができます後でそれを使用しますか?

ありがとうございました。

答えて

3

アプリケーションバンドルに直接書き込むことはできません。/Documentsや/ Library/Cachesのように、アプリのサンドボックス内のディレクトリを使用する必要があります。これらのパスを取得する方法については、Getting paths to standard application directoriesを参照してください。

+0

甘いありがとう。すべての私の努力とあなたは1つの段落で問題を解決します!ハハ、ありがとう! – LouwHopley

関連する問題