2016-04-11 9 views
0

を殺さないようにそれは私のコードです:スマートな方法は、Webサービス

for (FlightScopePlayerPlayer *player in self.selectedPlayers) { 
BaseballPlayer_GetBaseballProfileRequest *re = [[BaseballPlayer_GetBaseballProfileRequest alloc]initWithPlayerID:player.ID]; 
      [bseModel.myFlightScopeClient.baseballPlayerServiceClient GetBaseballProfile:re 
                      onCompleted:^(id response) { 
                       BaseballPlayer_GetBaseballProfileResponse *res = (BaseballPlayer_GetBaseballProfileResponse *)response; 
self.player = res.player; 
[self.baseballPlayerList addObject:self.player]; 
[DelegateHelper performProtocol:@protocol(LoadPlayersFromWSModelCallbackDelegate) 
                             withTarget:self.delegates 
                            withSelector:@selector(isResponseRedyToUseAfterGetProfile:) 
                            withArgument:self]; 

この構造は、私のwebserviceを殺すことができます。これを送るよりスマートな方法は何ですか?アイデアは配列でオブジェクトであり、私はすべての人にリクエストを送信したいが、配列内に1000オブジェクトがある場合Webserviceは死ぬことができるので、私のアイデアは前の終了時に要求を送信し、最後にデリゲートを送信する。

+0

idsのリストを持つ1つのリクエストをサーバに送信し、サーバから1つのレスポンスを返すことができるはずです...現在のコードがウェブサービスを破るよりもむしろネットワークにあふれている可能性があります – Wain

+0

このウェブサービスは、入力は正確に1つのIDを取得します。私はidのe.x配列を送ることはできません – hds

答えて

0

理想的には、異なるWebサービスを使用します。

あなたが変更できないと仮定すると、一度にあまり多くを作らないようにリクエストをキューに入れ、必要に応じて処理を中断できるようにする必要があります。潜在的には、失敗した要求をキューの最後に再度追加して再試行することもできます。

NSOperationQueueが適切です。 NSBlockOperationを使用して、Webサービスを呼び出す処理ロジックを含めることができます。あなたが基本的な考え方は、アレイ内のWeb API呼び出しを保存するために、次にあなたがシリアルにそれらを実行することができますですRQOperation

を使用することができます1と4

0

の間でいくつかの値にmaxConcurrentOperationCountを設定してください。 (前の手順が完了したら、次の手順を実行してください)

希望が役立ちます。

コメントとして投稿する担当者が不十分ですので、回答してください。