0

AFNetworking を使用して mp3 ファイルをダウンロードしています。ダウンロードは特定の ViewController で行われます。mp3 ファイルは非常に大きいため、ダウンロードが完了するまでに数分かかります。問題は、別の ViewController に移動すると、ダウンロードが停止し、ViewController のダウンロードに留まり、ダウンロードが完了するまで待たなければならないことです。それはユーザーにとってイライラするでしょう!ダウンロードViewControllerが閉じられた場合でもダウンロードを開始する方法はありますか? ダウンロードに使用するコードは次のとおりです。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sample.com/samplefile.mp3"]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSString *mp3Name = @"sample.mp3";

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:mp3Name];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
4

2 に答える 2

0

シングルトンを作成できます

 +(id)sharedInstance
{
static dispatch_once_t pred;
static MyClass *sharedInstance = nil;
dispatch_once(&pred, ^{
    sharedInstance = [[MyClass alloc] init];
});
return sharedInstance;
}

ダウンロード操作を実装します。

シングルトーンを使用したことがない場合は、この記事を読む必要がありますiOS デザイン パターン

raywenderlich に関するこの記事もお読みください。Web サービスを使用して作業を正しく整理する方法を理解することができます。

AFNetworking 短期集中コース

NSOperations

于 2014-02-15T16:43:31.060 に答える
0

目的を達成する最も簡単な方法は、ApplicationDelegate にメソッドを配置して、ダウンロードを開始し、ダウンロードが完了したらビュー コントローラーに通知することです。したがって、コードを applicationDelegate に移動するだけです。

注意: それが最善の方法だとは思いません。別のクラスでネットワーク トラフィックを処理する方がはるかに優れていますが、最も簡単な方法は、ApplicationDelegate である (既に確立されている) シングルトンを使用することです。

于 2014-02-15T16:49:19.730 に答える