2

次のコードがあります。

while ( /* Some condition that will not be met in this example */ ) {
    if( shouldSendRequest ) {
        [launchpad getRequestToken];
    } 
    else {
        // Next step
    }
}

- (void)getRequestToken {

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

         [self requestForRequestTokenDidComplete:data withResponse:response withError:error];
     }];
}

-(void)requestForRequestTokenDidComplete:(NSData *)data 
       withResponse:(NSURLResponse *)response withError:(NSError *)error {
    // Deal with the returned token
}

私が抱えている問題は、 while ループ内にあるgetRequestToken限り、完了ハンドラーが呼び出されないことです。getRequestTokenwhile ループをコメントアウトするとすぐに、すべてが機能します。

ここで何が起きていて、それを防ぐことは可能ですか? while ループを使用して、この (および他の) 完了ハンドラーが処理を完了する前に実行フローが進行するのを防ぐことを計画しました。

4

1 に答える 1

5

機能しない理由はNSURLConnection、ランループと連携して非同期リクエストを実行するためです。したがって、ステートメント内でフローを停止whileして実行ループを停止すると、リクエストの完了が妨げられます。

ランループを人為的にポンピングするか、バックグラウンド スレッドを使用する必要があります。

見る:

そして他にもたくさん...

于 2013-01-19T16:34:26.617 に答える