8

おい!iOSアプリケーションでアプリケーションのバックグラウンドでダウンロードを開始する方法(たとえば、AppDelegateファイルでダウンロードを実行する方法)を知っておく必要があります。これにより、ViewControllersを変更してもダウンロードが中断またはキャンセルされません。また、ダウンロードの進行状況()を取得して、オブジェクトを0.00000 - 1.00000に設定できる必要があります。これは、関数が必要であることも意味します。UIProgressView- (void)progressDidChangeTo:(int)progress

4

2 に答える 2

18

ASIHTTPRequestを使用するだけで、NSURLRequestよりもはるかに簡単で、必要なことを正確に実行できます。バックグラウンドでダウンロードする方法と進行状況を報告する方法を示す例です。

AppDelegateに直接何もダウンロードしません。代わりに、その目的のためだけに別のクラスを作成します。MyServiceそれを、アプリデリゲートでそのクラスを初期化すると呼びましょう。

クラスはシングルトンとして機能することも、それを必要とする各ViewControllerに渡すこともできます。

クラスではMyService、ASINetworkQueueと、準備ができたときにリクエストを処理するためのいくつかのメソッドを追加します。使用できるASIの例のコードは次のとおりです。

- (IBAction)startBackgroundDownloading:(id)sender
{
   if (!self.queue) {
      self.queue = [[[ASINetworkQueue alloc] init] autorelease];
   }

   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request setDidFinishSelector:@selector(requestDone:)];
   [request setDidFailSelector:@selector(requestWentWrong:)];
   [self.queue addOperation:request]; //queue is an NSOperationQueue
   [self.queue go];
}

- (void)requestDone:(ASIHTTPRequest *)request
{
   NSString *response = [request responseString];
   //Do something useful with the content of that request.
}

- (void)requestWentWrong:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}

プログレスバーを設定する必要がある場合。MyServiceクラスでASINetworkQueueのsetDownloadProgressDelegateを公開し、次のようにViewControllerに設定します。

[[MyService service] setDownloadProgressDelegate: self.myUIProgressView];

ところで。アプリが終了してもダウンロードを続行する必要がある場合ShouldContinueWhenAppEntersBackgroundは、リクエストのプロパティを[はい]に設定できます。

于 2011-01-02T19:03:23.867 に答える
3

NSURLConnectionを使用して、UIがフリーズしない非同期リクエストを開始できます。次のようなことを行うことでそれを行うことができます:

NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:url];
connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
[urlRequest release];

進捗状況を確認するには、次を使用できます。

connection:didReceiveResponse:(NSURLResponse *)response;

呼び出しを委任してresponse.expectedContentLengthを検査してから、

connection:didReceiveData:(NSData *)data

ダウンロードされたデータの量を追跡し、パーセンテージを計算します。

これがお役に立てば幸い、モシ

于 2011-01-02T18:50:41.337 に答える