1

を介してサーバーに接続し(POSTリクエストを送信)NSURLConnection、サーバーからデータを受信するアプリケーションがあります。私はそれが別のスレッドのバックグラウンドで起こっていることを望みます。私はこの目的のために使用されるのを見てきNSOperationました-このチュートリアルに示されているように-

並行操作の謎を解き明かす

しかし、これは少し古いチュートリアル(2009年からさかのぼります)であり、おそらくこれを行うためのいくつかの新しい方法が見つかりました。基本的に私がやりたいのは-開始NSOperationし、データを受信するのを待って(スレッドを作成しないと終了し、データが失われるため)、データの準備ができたことを通知します(おそらく経由NSNotificationCentre

私が行うリクエストは非同期なので、プログレスバーを使用してデータを待つことができます。データが受信されるまでスレッドをスリープさせるNSOperationブロック内で呼び出すことができるものはありますか?特定の条件が満たされるのを待つループのように?

4

3 に答える 3

3

チュートリアルは時代遅れです。今日、同じことをより簡単にコーディングできます。NSOperationQueueリクエスト用の を作成し、 をNSOperationBlock同期と組み合わせて使用​​しNSURLConnectionてデータをダウンロードします。

[queue addOperationWithBlock:^{
    NSError *error = nil;
    NSHTTPURLResponse *response = nil;
    NSMutableURLRequest *request = /* build request */;
    NSData *data = [NSURLConnection
        sendSynchronousRequest:request
        returningResponse:&response
        error:&error];
    /* handle errors and callbacks */
}];

キューを使用すると、同時リクエストの数に制限を設定でき、無料のキャンセルもサポートされます (ただし、もちろんリクエスト内ではできません)。

于 2012-07-19T06:57:31.643 に答える
1

Web からデータを取得する場合は、キューと同期/非同期データの読み込みをサポートするAsihttprequestを使用することをお勧めします。

于 2012-07-19T06:54:26.203 に答える
-1
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
     initWithTarget:self
     selector:@selector(Method)
     object:nil];
[self.Queue addOperation:operation];
于 2012-07-19T07:14:08.040 に答える