をどのように動作するかのアイデアを取得しないことを行うにはどのくらいのアイデアを持っていません
ASINetworkQueue
はNSOperationQueue
のサブクラスで、リクエストオブジェクトのキューを作成します。たとえば、リクエストが10回、リクエストが完了したときに5回、リクエストが完了したときに5回、キューがアクティブになります。
リクエストのキューを持つことは確かに役に立ちますが、リクエストをどのように処理しているかについては、コードを貼り付けていません。だから、どうすればいいのかという一般的な概念をあなたに教えてくれるでしょう:
まず、あなたがすでに曲をダウンロードするときを特定する方法を理解していると仮定しています。ファイルのURL。そうでない場合、here's another question related。また、have ASI installed。私はあなたが、単一のダウンロードキューで作業していることを想像するので、私はこのクラスはシングルトン(based on this answer)のように振る舞うようになります
#import "ASINetworkQueue.h"
#import "ASIHTTPRequest.h"
@interface DownloadManager : NSObject <ASIHTTPRequestDelegate>
{
ASINetworkQueue *requestQueue;
}
+ (DownloadManager*)sharedInstance;
- (void)addDownloadRequest:(NSString*)URLString;
:
さんが言う、ダウンロードを扱うオブジェクト、DownloadManagerを追加してみましょう。そうでない場合は、あなたのニーズに適合させる:
DownloadManager *manager = [DownloadManager sharedInstance];
[manager addDownloadRequest:MyUrl];
を最初のタブにはアイテムを追加します。すべてのことを行うと
@implementation DownloadManager
static DownloadManager *_shared_instance_download_manager = nil;
+ (DownloadManager*)sharedInstance
{
@synchronize
{
if (!_shared_instance_download_manager)
{
_shared_instance_download_manager = [[DownloadManager alloc] init];
}
return _shared_instance_download_manager
}
}
- (id)init
{
self = [super init];
if (self)
{
requestQueue = [[ASINetworkQueue alloc] init];
requestQueue.maxConcurrentOperationCount = 2;
requestQueue.shouldCancelAllRequestsOnFailure = NO;
}
return self;
}
- (void)addDownloadRequest:(NSString*)URLString
{
NSURL *url = [NSURL URLWithString:URLString];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.delegate = self;
[requestQueue addOperation:request];
[requestQueue go];
}
- (void)requestFinished:(ASIHTTPRequest*)request
{
// Request finished.
}
- (void)dealloc
{
[requestQueue release];
[super dealloc];
}
@end
を、今、あなたは、単にやってダウンロード要求を追加することができますDownloadManager
には、ダウンロードが完了したとき、または現在のステータスを他のタブで確認する必要があります。私はそれをコードに追加しませんでした。これは、これらのことをどのように行うかに依存しています。それはカスタムデリゲートメソッド(- (void)DownloadManager:(DownloadManager*)downloadManager didFinishDownloadRequest:(ASIHTTPRequest*)request
)、またはリクエストの現在の代理人を渡すか、NSNotificationCenterを使用することができます。
出典
2011-08-30 18:03:14
Can
いいえ、私たちはprogressbarの進捗状況をどのように表示するのですか?ユーザーが一度に1つのリクエストを追加してダウンロードプロセスに入り、別のリクエストが追加された場合はどうなりますか? – dark
あなたはバックグラウンドスレッドでsonggsをダウンロードできます。もし別のものが来たら、それを待ち行列に入れる必要があります。最初のものもnsoperationを使って完了するまで...... ......そうすれば、操作をシリアライズする必要があります。 –
@lak in Iphoneそれのいくつかのチュートリアルのリンク? – dark