7

これは本当に Google への機能リクエストだと思いますが、回避策を知っている人がいるかどうか知りたいです。GAE エンドポイント API に対して同期クエリ リクエストを実行したいと考えています。

Android では、リクエストの実行は同期的です。次に、それを AsyncTask に入れて、バックグラウンドで動作させるようにします。

iOS では、リクエストの実行は非同期です。コールバック ブロックを渡すだけです。

私は Android アプリを iOS アプリに変換していますが、それらが同じメカニズムを使用していれば本当にいいと思います。たとえば、同期クエリが必要な場合があります。コードを簡単にするだけで、バックグラウンド スレッドに配置することを知っています。

だから私の質問はこれです... iOSクエリが完了するまでブロックする方法はありますか(ハックかどうか)?

4

1 に答える 1

4

これと同様のコードを使用して、タイムアウトのあるコードで呼び出しが終了するのを待つことができます。明らかに、これを UI スレッドで実行したくないでしょうが、これにより、完了ハンドラーがシリアルで実行されることが保証されます。

NSLog(@"Before API Call");
GTLServiceTicket *apiCall = [apiService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                   GTLHelloworldHelloGreeting *object,
                                                   NSError *error) {
    NSLog(@"Starting completion handler");
    NSArray *greetings = [NSArray arrayWithObjects: object, nil];
    greetingsRetrievedFromAPI = greetings;
    [self performSegueWithIdentifier: @"DisplayGreetings" sender: self];
    NSLog(@"Ending completion handler");
}];
[apiService waitForTicket:apiCall timeout:100000 fetchedObject:nil error:nil];
NSLog(@"After completion handler");
于 2013-10-17T00:54:09.197 に答える