1

次のコードがあります。

-(IBAction)downloadButton:(id)sender{

    NSURL *url=[NSURL URLWithString:@"http://93.185.34.100/prob/pic1.zip"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    [request setDownloadProgressDelegate:progressView];

//    NSString *pathString=[NSString stringWithFormat:@"%@/theZip.zip", [[NSBundle mainBundle] resourcePath]];
    NSString *filePath = [[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"theZip"] stringByAppendingPathExtension:@"zip"];
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSLog(@"Directory Contents:\n%@", [fileManager contentsOfDirectoryAtPath:[[NSBundle mainBundle] resourcePath] error:nil ]);
    [request setDownloadDestinationPath:filePath];
    NSLog(@"Value: %f", [progressView progress]*100);
    [request startAsynchronous];


}

ダウンロードしたzipファイルをドキュメントディレクトリにダウンロードして保存する必要があります。シミュレーターで実行すると動作しますが、デバイスでは動作しません。

何が問題ですか?

4

1 に答える 1

2

あなたが持っているコードは、バンドルディレクトリへのパスを取得しています。これらは、アプリに含めるリソースです。これらのリソースは読み取りは可能ですが、アプリのインストール後に書き込み変更を行うことはできません。基本的に、これはアプリの読み取り専用ディレクトリです。

ファイルを保存する場合は、ファイルをアプリのドキュメントキャッシュ、またはアプリケーションサポートフォルダーにコピー(または保存)する必要があります。ドキュメントとキャッシュフォルダへのパスは、次のコマンドで取得できます。

NSArray* documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDir = (NSString*)[documentsPaths objectAtIndex:0];

NSArray* cachesPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* cachesDir = (NSString*)[cachesPaths objectAtIndex:0];

iOSアプリでのファイルの保存に関するAppleのリファレンスは次のとおりです(アプリ固有のファイルを保存する場所の決定については、そのページを検索してください)。これにより、この種のデータに最も適したディレクトリに関する情報が得られます。

重要なのは、読み取り専用のバンドルフォルダーではなく、これらのフォルダーの1つを使用することです。

于 2012-07-23T00:30:40.393 に答える