質問

「ViewWillappear」メソッドにWebから大量のデータをロードする2つのビューを持つUITABBARアプリケーションがあります。このデータが取得されている間に進行状況バーまたはアクティビティインジケーターを表示し、ユーザーがアプリが凍結されていないことを確認するようにしたいと思います。

これが以前に尋ねられたことを知っています。むしろ何があると思われるものについて説明する必要があります 良い解決策.

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

調査により、メインスレッドでUIの更新がすべて発生するため、重いデータ取得をすべてバックグラウンドスレッドに移動する必要があることがわかりました。

私に例を提供するほど親切であれば、私は非常に感謝しています。必要に応じて、既存のコードの一部を提供できます。

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top