0

サーバーから Cocoa .bundle ファイルをダウンロードしてアプリにロードするにはどうすればよいですか? zip を使用してみましたが、shouldDecodeSourceDataOfMIMEType関数が呼び出されません。

- (IBAction)testDownload:(id)sender {
    // Create the request.
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost/SampleBundle.zip"]
                                                cachePolicy:NSURLRequestUseProtocolCachePolicy
                                            timeoutInterval:60.0];

    // Create the connection with the request and start loading the data.
    NSURLDownload  *theDownload = [[NSURLDownload alloc] initWithRequest:theRequest
                                                                delegate:self];
    if (theDownload) {
        // Set the destination file.
        [theDownload setDestination:@"/Users/developer/Desktop/Test-Downloads/SampleBundle" allowOverwrite:YES];
    } else {
        // inform the user that the download failed.
    }
}


- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error
{
    download = nil;

    // Inform the user.
    NSLog(@"Download failed! Error - %@ %@",
          [error localizedDescription],
          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}

- (void)downloadDidFinish:(NSURLDownload *)download
{
    download = nil;

    // Do something with the data.
    NSLog(@"%@",@"downloadDidFinish");
}

- (BOOL)download:(NSURLDownload *)download shouldDecodeSourceDataOfMIMEType:(NSString *)encodingType;
{
    BOOL shouldDecode = YES;
    NSLog(@"EncodingType: %@",encodingType);
    return shouldDecode;
}

では、サーバーから .bundle をダウンロードして解凍し、アプリケーションにロードするにはどうすればよいでしょうか?

ありがとう

4

2 に答える 2

1

shouldDecodeSourceDataOfMIMETypeデリゲートはうまく機能しますが、 gzip (.gz) アーカイブでのみ機能します。.zip と .gz の両方で広範囲にテストしました。

tar を呼び出さないことにも注意してください。そのため、次のように圧縮と tar を同時に適用した場合:

tar czvf ArchiveName.tar.gz ./ArchiveName/

shouldDecodeSourceDataOfMIMETypeデリゲートを使用すると、次のようになります。

ArchiveName.tar

そのため、アーカイブはすぐには使用できません。

.zip アーカイブの場合、他の人が指摘しているように、最善の策はMiniZip (C API)、またはZipArchive (2005) やより最近のSSZipArchive (2013)のようなそれに基づく Objective-C フレームワークです。

于 2014-06-05T14:57:57.977 に答える
1

ダウンロードのドキュメントによると:shouldDecodeSourceDataOfMIMEType:

ダウンロードしたファイルがエンコードされていない場合、このメソッドは呼び出されません。

ですから、何か関係があるのではないかと推測しています。おそらく、 download:didReceiveResponse: を実装し、NSURLResponse オブジェクト、特にステータス コードを調べる方がよいでしょう。それが 200 でない場合は、何か問題が発生しており、HTTP コードを調べて問題の正確な内容を確認する必要があります。

また、これについてはよくわかりません。実行可能ファイルであるバンドルをインストールするには、昇格されたアクセス許可が必要ですか?

于 2012-05-19T12:49:03.577 に答える