0

iOS アプリを採用しましたが、非同期リクエストに問題があります。

次のコードを持つ WebService クラスがあります。

// create the request
NSURLRequest* request=[NSURLRequest requestWithURL:url
                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                       timeoutInterval:30.0];

self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (self.connection) {
  self.receivedData = [NSMutableData data];
} else {

これは、バックグラウンド スレッドでかなり普通の NSURLRequest のように見えます。ただし、この呼び出しが終了すると、UITableViewController がフリーズします。何が起こるのか誤解しているのかもしれませんが、テーブルビューをスクロールできるはずです。上記のコードに何か問題がありますか?私がデバッグしている 1 つの可能性は、SDWebImage を使用してサムネイルをダウンロードしていることです。フリーズは、上記の画像のダウンロードが原因である可能性がありますが、これはバックグラウンド スレッドで行われると思います。上記の NSURLRequest はメインスレッドをブロックする必要がありますか? SDWebImage が原因であることを確認できることを確認する方法はありますか?

どうも

4

1 に答える 1

0

この典型的なパターンは、リクエストの作成です。self をデリゲートに設定し、次のようにデリゲート メソッドで応答を処理します。

-(void)someMethod
{
     NSURLRequest* request=[NSURLRequest requestWithURL:url
         cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
     self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
     if(statusCode == 200) // or whatever makes sense in your situation.
         self.receivedData = [NSMutableData data];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [requestData appendData:data];
}

またはそのようなもの....しかし、このすべてのものをどこから呼び出しているのかわかりません...そして、同じメソッドで両方を実行しているように見えます。

于 2012-07-01T23:24:39.697 に答える