0

OK私はこれのために多くの異なる方法を試しました。JSON API を呼び出し、その応答を取得し、キー値を保存してから、別のパラメーターで再度呼び出したいと考えています。ごく最近、for ループで URL メソッドを呼び出し、 connectionDidFinishLoading: 通知が投稿されたときに NSNotification を投稿し、オブザーバーに NSLogging 値を投稿しようとしました。ただし、最終呼び出しの値を複数回記録するだけです。

これを接続の初期化に使用します...

 eventConnection=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] delegate:self startImmediately:NO];
        [eventConnection scheduleInRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [eventConnection start];

これはデリゲートメソッドです...

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  NSNotification *eventNotification=[NSNotification notificationWithName:@"eventsFound" object:nil userInfo:responseDict];
        [[NSNotificationQueue defaultQueue]enqueueNotification:eventNotification postingStyle:NSPostNow coalesceMask:NSNotificationCoalescingOnName forModes:nil];
}

これを達成する方法について何か提案はありますか?

4

4 に答える 4

3

複数の NSURLConnection リクエストを効果的に連鎖させるには、一度にすべてを開始しないでください (たとえば、「for ループで」と言うように)。

代わりに、最初のリクエストを開始します。次に、connectionDidFinishLoading最初から2番目。が再び connectionDidFinishLoading実行されると、3 番目が開始されます。

これは、アプリの優れた設計を見つけるのに役立つ方法の単なるスケッチです。1つの可能性は次のとおりです。

  1. 現在の状態に応じてリクエストを発行するステート マシンを定義します。(状態は、行った一連のステップを表す単純な整数である可能性があります);

  2. ステート マシンを開始します。最初のリクエストが実行されます。

  3. リクエストが完了connectionDidFinishLoadingすると、ステート マシンにシグナルを送り、次のステップに進みます。

  4. 各ステップで、ステート マシンはそのステップに対応する要求を開始します。

もちろん、他の設計オプションも可能です。どちらが最適かは、全体的な要件と必要なコール フローの種類によって異なります。

于 2012-05-10T08:03:57.150 に答える
2

カウンターと送信するリクエストの総数を設定します。接続で読み込みが完了したら、カウンターが送信する要求の総数に達したかどうかを確認します。そうでない場合は、データを送信していたメソッドを再度呼び出し、送信された要求を増やします。ファイルのデータを使用する場合。つまり、最初に番号付きのファイルにデータを書き込み、リクエストを送信したいときにそれを読み取ると、それは素晴らしいことです

于 2012-05-10T08:04:23.047 に答える
0

NSOPerationQueueまたはBlockまたはthreadを使用できます。1つを終了した後、別の関数を呼び出します。

于 2012-05-10T09:18:07.923 に答える
0

ハム、

AFNetworkingのようなライブラリを使用しようとした場合、非同期要求を作成し、ブロックを使用して回答を処理できます。

于 2012-05-10T08:58:09.823 に答える