0

こんにちは、私のアプリケーションの 1 つです。私はサーバー(jsonサーバー)に何度もリクエストを送信する必要があります.私のURLは以下のようになります

@"http://185.185.116.51/servername/serverjspfilesname.jsp?filterID=21&ticket=65675656565656567"

実際、私は多くのフィルター ID を持っています (フィルター ID は一番上にあります)。

for(int i=0;i<[appdelegate.listOfFiltersArray count];i++)
    {

        filtersDataModelObject=[[ListOfFiltersDataModel alloc]init];

        filtersDataModelObject=[appdelegate.listOfFiltersArray objectAtIndex:i];

       homescreenstring=[NSString stringWithFormat:@"http://%@/servername/serverjspfilesname.jsp?filterID=%@&ticket=%@",Ip,filtersDataModelObject.filterID,[storeData stringForKey:@"securityTicket"]];


        NSLog(@"url is %@",homescreenstring);

        NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:homescreenstring]];

        connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];

        if(connection)
        {

            homeScreenResponseData=[[NSMutableData alloc]init];

        }
        else
        {

            NSLog(@"connection failed");
        }

    }

実際には、for ループで各条件が満たされた後、nsurlconnection デリゲート メソッドを使用してサーバーからデータを取得するためにサーバーに接続する必要があります。しかし、ここでは for ループの実行が完了した後、nsurlconnection デリゲート メソッドのみが appdelegate.listOfFiltersArray 配列から取得される最後の filterid で実行されます。

しかし、各フィルター ID に対してサーバーを呼び出したいと思います。

知っている人がいたら教えてください。よろしくお願いします。

4

2 に答える 2

0

.h ファイルに 1 つのカウント変数 int count を作成します。

 int count = 0 //in .m file

次の方法を使用します。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  //one request finished
  count ++;
  //request another using count
}
于 2012-08-21T06:46:33.797 に答える
0

プリンスが提案した解決策は、各リクエストの「filterid」を定義するという問題に直面するため、一般的ではありません。

そして、あなたがしていることは悪いアプローチです。Web 要求とビジネス ロジック コードを混在させないでください。Web 要素は、アプリ全体のすべての要求を処理する別のファイルで処理する必要があります。そして、そのクラスは委任を実装します。

委任するには、次のことを行う必要があります。Network クラス ヘッダー (Networkclass.h) にプロトコルを追加します。

@protocol NetworkControllerDelegate <NSObject>
-(void) UrlResponseRecieved :(NSData *)responseData;
-(void) UrlResponseFailed:(NSError *)error;
@end

NetworkClass.m (実装ファイル) で次のことを行います。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    if (receivedData != nil) 
    {
       if([delegate respondsToSelector:@selector(UrlResponseRecieved:)])
        [self.delegate UrlResponseRecieved:receivedData];
        [receivedData release];
        receivedData = nil;
    }
    [connection release];
}

それでも問題が解決しない場合は、 次の URLConnection の何が問題になっていますか?を参照してください。

または、非同期ダウンロードのチュートリアルを最初に読むこともできます。

于 2012-08-21T10:11:38.380 に答える