0

Web サービスからデータを取得するための 5 つの HTML リクエストがあります。forループでリクエストしています。

-(void)loadPreviewsData
{
    NSMutableURLRequest *request;
    for (int i=1; i<=5; i++) 
    {
        if(i==1)
        {
            //request 1

        }
        if(i==2)
        {
           //request 2
        }
        //3 to 5 

       request.HTTPMethod = @"POST";

   NSURLConnection *myConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];

    if(myConnection)
    {
         HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
         HUD.labelText=@"Please wait.";
         myData = [[NSMutableData alloc] initWithLength:0];

    }
    else 
    {
        UIAlertView  *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Connection could not be established!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }

}// end for loop
}//end loadPreview

すべての応答には多くのデータがあり、応答データを配列に保存していますが、最初の応答を待って別の要求を行っていません。最後に for ループが終了し、次のビューが読み込まれますが、配列へのデータのコピーが完了していないために解析がまだ行われていないため、エラーが発生して配列が埋められません。

メソッドで試しましsleep(5);-(void)parserDidEndDocument:(NSXMLParser *)parserが、応答時間がネットワーク トラフィックに依存するため、有効ではありません。何をすべきか理解できません助けてください。

次の回答も試しましたが、理解できませんコードが実行を終了するのを待ちます

4

3 に答える 3

1

おそらく、同じデリゲートで非同期メソッドを使用しています。これは、同時に 5 つの要求を行うことを意味します。

Grand Central Dispatch でキューを作成できます: http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/

于 2012-11-02T11:15:44.267 に答える
1

同期httpリクエストをやりたいと思います。このリンクについて読む必要があります。そして、このオープンソース ライブラリがASIHTTPRequestに役立つことがわかりました

注: ASIHTTPRequest プロジェクト オーナーは、そのプロジェクトのサポートを終了しました。

于 2012-11-02T11:13:39.900 に答える
0

HTTP リクエストにはAFNetworkingを使用することをお勧めします。

次に、XML 解析を行う別のクラスを作成できます。

これにより、応答を簡単に受信して XML クラスに渡すことができ (要求を個別に処理するには、XML パーサー クラスの新しいオブジェクトを作成する必要があります)、XML はそれを解析します。

異なる構造の異なる応答がある場合、XML クラスに現在の解析を通知する必要がある場合があります。例えば

MyXMLParserClass *pars = [[MyXMLParserClass alloc] init];
pars.ParsingOperation=1;

また

pars.ParsingOperation=2;

その後、XML パーサー クラスで動作を確認できます。

if(self.operationType==1)
{
   // Your code
}
else if(self.operationType==2)
{
  // your code
}

お役に立てれば。

于 2012-11-02T20:29:35.117 に答える