7

我想这确实是对 Google 的功能请求,但我很好奇是否有人知道解决方法。我想对 GAE Endpoints api 执行同步查询请求。

在 Android 中执行请求是同步的。然后将其放入 AsyncTask 以使其在后台工作。

在 iOS 中执行请求是异步的。您只需传入一个回调块。

我正在将 Android 应用程序转换为 iOS 应用程序,如果他们使用相同的机制,那就太好了。例如,有时我想要一个同步查询。它只是让我的代码更容易,我知道把它放在后台线程上。

所以我的问题是......在iOS查询完成之前有什么方法(hacky与否)阻止?

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 回答