1

機能を実行するiPhoneインターフェイスにボタンがあります。関数は次のとおりです。

-(IBAction)courses:(id)sender {
[loading startAnimating];
[connection getCourses];
[outlet setText:connection.lastResponseData];
}

私の問題は、アニメーションが[outlet setText:connection.lastResponseData. その前に読み込みを開始するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

2

getCoursesメインスレッドをブロックしているようです。あなたが開始したアニメーションは、戻るまで削除されcourses:ます。バックグラウンド スレッドを使用するようにコードを変更します。

-(IBAction)courses:(id)sender {
[loading startAnimating];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [connection getCourses];
        dispatch_async(dispatch_get_main_queue(), ^{
            [outlet setText:connection.lastResponseData];       
            [loading stopAnimating];
        });
    });
}

これにより、ブロックしているネットワーク アクセスがシステム提供のバックグラウンド GCD キューに入れられ、バックグラウンド スレッドがラップされます。

于 2012-05-27T03:19:53.513 に答える
0

あなたの接続は、UI も担当するメイン スレッドをブロックしているようです。connectionが開始されているが終了していない間に UI と対話してみてください。応答しない場合は、別のスレッドで接続を実行してください。


たとえば、非同期NSURLConnectionは UI をブロックしません。

于 2012-05-27T03:10:18.940 に答える