0

アプリがニュースやビデオをフェッチしているときに、読み込みメッセージを表示するのが好きです。現在、私は次のコードを持っています:

 [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

        [self loadVersion];
        [self loadFeaturedNews];
        [self loadFeaturedVideo];

        dispatch_async(dispatch_get_main_queue(), ^{

            [MBProgressHUD hideHUDForView:self.view animated:YES];

            [self dismissViewControllerAnimated:NO completion:nil];

        });
    });

すべてのタスク(ニュース、ビデオ)がロードされたときにのみ、コントローラーを閉じて進行状況ビューを非表示にします。

4

2 に答える 2

1

AFNetworkingを使用している場合は、を確認することをお勧めしますenqueueBatchOfHTTPRequestOperationsAFNetworking FAQを参照してください:

リクエストのグループが終了するのを待ってから処理するにはどうすればよいですか?

[ enqueueBatchOfHTTPRequestOperationsWithRequests]または[ enqueueBatchOfHTTPRequestOperations]を使用して一連のリクエストをまとめ、すべてのリクエストが終了したときのコールバックを指定します。完了ブロックの終了の待機に関する質問で述べたように、個々の操作ごとに完了ブロックを設定するのではなく、バッチ完了ブロックで応答オブジェクトのプロパティに直接アクセスすることをお勧めします。


loadVersion、、loadFeaturedNewsおよびloadFeaturedVideoメソッドはそれぞれ非同期でコンテンツをダウンロードしていることを収集します。を使用している場合はNSURLConnection、同期して動作するように変更することをお勧めします。ソリューションの詳細は、これらのルーチンで現在どのようにダウンロードしているのかによって異なります。たとえば、NSURLConnectionメソッドを使用している場合はinitWithRequest、を使用できますsendSynchronousRequest

個人的には、ディスパッチグループまたは依存関係と同時にリクエストを実行することと組み合わせたいと思いますNSOperationQueueが、最初はそれらを同期的に実行することに焦点を当てます。私は実際に使用するNSOperationQueueので、同時操作の数を簡単に4つに制限することができます。

ちなみに、質問のコードを変更することはまったくお勧めしません。それを維持しdispatch_asyncます。、、、およびメソッド自体を修正して、同期して動作するようにすることをお勧めしloadVersionます。loadFeaturedNewsloadFeaturedVideo

于 2013-02-12T18:48:36.863 に答える
0

次に、これに完了ハンドラーを使用します。完了後に実行されるコードを記述できるという点で

completion:^ (BOOL finished) {

    }
于 2013-02-12T18:12:01.947 に答える