2011-11-14 12 views
3

私は以下のコードを使用してカールの呼び出しを行うたび:同じデリゲートでconnectionDidFinishLoadingを使用して異なるリクエストを処理するにはどうすればよいですか?

NSURL *url = [NSURL URLWithString:requestURL]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url 
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
timeoutInterval:30]; 
if (connectionInProgress) { 
    [connectionInProgress cancel]; 
} 
connectionInProgress = [[NSURLConnection alloc]initWithRequest:request delegate:self  startImmediately:YES]; 

connectionDidFinishLoadingは、私は、応答データを操作し、アプリを継続するために私の次のメソッドを呼び出すことができ、私の最終目的地です。私はハードコード

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; 
[parser setDelegate:self]; 
[parser parse]; 
[someLabel setText:parsedTextFromXMLData]; 
} 

私は別のアドレスに別のカールの呼び出しを行う必要がある場合のようないくつかの特定のタスクをした場合、someLabelのsetTextは必ず再設定を再度取得していないでしょうか?このデリゲート関数を各curl呼び出しごとに異なる振る舞いにする方法はありますか? (btw、通常はconnectionDidFinishLoadingはコードの次のステップを置くのに適していますか?)もしそうなら、それはいつも次のカールコールで再び呼び出されるでしょうか?

答えて

1

NSURLConnectionと、複数のrequests.The提案に関するレシピのこのS.O. postを見て、このような何かをやっている持ってここでの考え方はconnectionDidFinishLoadingは、独自のデリゲートのメソッド(そうであるということですあなたはそれを書く)。デリゲートでは、作成した各接続のアドレスを格納します。次に、データが接続に戻ったときに、そのアドレスをデリゲートに格納されているアドレスと比較することによって、どの接続であるかがわかります。 -END EDIT

あなたが持っている別のオプションは、接続ベースの委譲メカニズムとは対照的にリクエストベースのものを提供しているので、それぞれのリクエストに結果を処理するデリゲートオブジェクトがあるので、ASIHTTPRequest frameworkを使用しています。つまり、デリゲートがリクエストへの参照を受け取るので、処理しているリクエスト結果を簡単に知ることができます。

ASIHTTPRequestは、NSURLConnectionに比べて多くの利点があります。これについてはS.O. postで読むことができます。

+0

迅速な対応と投稿をありがとう。 Btw、どうすれば1stと2ndの接続を区別できますか?私が確認できる接続タイトル/識別子はありますか?ありがとう – sonoluminescence

+0

私の編集を参照してください、それが助けて欲しいです。とにかく、接続識別子がないので、アドレスを使用しています。 – sergio

+0

それは、ありがとう、セルジオを得た! – sonoluminescence

1

これを行うには、そこにいる2つのオプション:

  1. あなたがNSObjectのを使用することができますNSURLConnectionデリゲートのものを処理するための責任があると、各要求
  2. のための別個のインスタンスを作成する別のクラスを実装することができますNSURLConnectionのインスタンス上のキーと値のメソッドは、いくつかのタグを設定するため、それがconnectionDidFinishLoadingにチェックされます:メソッド

私にとっては、選択肢1は、より良いアプローチ

になります

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    if (connection == firstConnection) { 
    // do something 
    } 
    else if (connection == secondConnection) { 
    // do something else 
    } 
} 

EDIT:210

+0

恐ろしい!ありがとう、Denis – sonoluminescence

関連する問題