0

私はiPhoneの開発に慣れていないので、誰かがこの問題を解決するのを手伝ってくれますか?

for (int i=0;i<=[listingAffArray];i++)
    NSString *urlStr=[NSString stringWithFormat:@"http://demo.holidayjuggle.net:7777/services/inventoryservice/%@/%@/stores/search?location=12.971598700000000000,77.594562699999980000,50",appDelegate.buyingAff,[appDelegate.listingAffArray objectAtIndex:i]];
}

これで私はすべてのURLから応答を取得していますが、didfinishloadingではどのURLのresponsedataを見つけることができませんでした

NSURL *url=[NSURL URLWithString:urlStr];

NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:url];

[req setHTTPMethod:@"GET"];

[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

connection=[NSURLConnection connectionWithRequest:req delegate:self];
if(connection){
    NSLog(@"connection is successfull "); 
}
else{
    NSLog(@"connection failed");
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{ 
    responseData=[[NSMutableData alloc]init]; 
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [responseData appendData:data]; 
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *strResponse=[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];

}

responsedataには最後のURLデータのみがあり、ブレークポイントを配置し、各URLがdidfinishloadingで呼び出されていることを確認しました。別々に

前もって感謝します

シヴァクマリ

4

3 に答える 3

0

URL を使用して Web サービスを非同期で呼び出してみてください。つまり、最初の URL をヒットし、最初の URL の結果を受け取ったら、2 番目の URL リクエストをヒットします。その後、2 番目の URL 応答を受信したときに、3 番目の URL 要求にヒットしました。

これらのすべてのリクエストは、メイン スレッドに影響を与えないように、バックグラウンド スレッドまたは新しいスレッドで実行する必要があります。

また、次のような列挙型データ型を取ります

enum {
  requestOne=0,
  requestTwo,
  requestThree,
  requestFour
}currentRequest;

currentRequestData の最初の URL にアクセスし始めると、requestOne が割り当てられ、応答としてこの enumDataType がチェックされます。応答が受信されたとき、2番目の列挙型の2番目のURLにヒットします

于 2013-01-05T13:40:53.397 に答える
0

クラスに配列を作成し、それぞれstrResponseを配列に格納します ( を使用addObject)。

また、これは意味がありません:

for (int i=0;i<=[listingAffArray];i++)
    NSString *urlStr=[NSString stringWithFormat:@"http://demo.holidayjuggle.net:7777/services/inventoryservice/%@/%@/stores/search?location=12.971598700000000000,77.594562699999980000,50",appDelegate.buyingAff,[appDelegate.listingAffArray objectAtIndex:i]];
}

この[listingAffArray]部分ではコンパイラ エラーが発生するはずです。たとえそれが機能したとしても、ループのたびに同じ変数を上書きすることになります。

于 2013-01-05T13:17:34.047 に答える
0

NSURLConnectionはい、すべてが「自己」である同じデリゲート同じオブジェクトを共有するために起こります

複数の URL をロードしたい場合は、そのデータを保存するための複数のスペースが必要です。

したがって、responseData の 1 つのオブジェクトでは不十分です。

私が使用しているものを提案させていただく方法はたくさんあります。

  • NSMutableDictionaryオブジェクトを宣言する
  • オブジェクトNSURLConnectionをキーとして保存し、NSMutableDataオブジェクトを値として保存するため、3 つの URL がある場合は 3 つのエントリがありNSMutableDictionaryます。
  • すべての Delegate メソッドで、対応するオブジェクトNSURLConnectionにのみデータを追加します。NSMutableData

さらに助けが必要な場合は教えてください....

于 2013-01-05T13:22:10.063 に答える