3

「viewWillAppear」メソッドで Web から大量のデータをロードする 2 つのビューを持つ UITabBar アプリケーションがあります。このデータの取得中に進行状況バーまたはアクティビティ インジケーターを表示して、ユーザーがアプリがフリーズしていないことを確認したいと考えています。

私はこれが以前に尋ねられたことを知っています。かなり良い解決策と思われるものについて、明確にする必要があります。

例のコードを実装しました。質問の元の質問者は、データの取得を別の「スレッド」に入れることで、後で問題を解決しました。スレッドの概念は理解していますが、これをどのように実装するかはわかりません。

調査の結果、UI の更新はすべてメイン スレッドで行われるため、大量のデータ取得をすべてバックグラウンド スレッドに移動する必要があることがわかりました。

親切にも私に例を提供していただければ、とても感謝しています。必要に応じて、既存のコードの一部を提供できます。

4

1 に答える 1

3

NSURLConnectionを使用すると、別のスレッドで自動的に実行されます。

viewDidLoadで:

NSURLRequest *req = [NSURLRequest requestWithURL:theURL];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];

次に、いくつかのカスタムメソッドが必要です。入力し-connectionてEscキーを押すと、使用できるさまざまな方法がすべて表示されます。これには3つ必要です。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // this is called when there is a response
        // if you're collecting data init your NSMutableData here
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // each time the connection downloads a 
        // packet of data it gets send here
        // so you can do [myData appendData:data];
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
        // the connection has finished so you can 
        // do what you want with the data here
}

基本的にはこれですべてです。NSURLConnectionは、すべてのマルチスレッド自体を処理するため、心配する必要はありません。これで、アクティビティインジケーターを作成して表示でき、メインスレッドが空であるため機能します。:)

于 2010-12-21T09:46:56.427 に答える